--------------------------------多线程 -------------------------------
1.程序 进程 线程 (了解)
2.如何实现多线程的创建(两种方式)和启动
1.继承 Thread 类
1)子类继承 Thread 类
2)重写 Thread 类的 run()方法? run()中是创建的多线程要实现的功能。
3)创建子类的对象(创建了几个,就有几个线程)
4)启动:对象.start();
2.实现 Runnable 接口
1)子类实现 Runnable 接口
2)重写 Runnable 接口的 run()方法?
3)创建一个子类的实例
4)将子类的实例作为实参传递给 Thread 的构造器中?
5)启动:对象.start();
比较两种方式的区别:联系,不同点,哪个好
3.涉及 Thread 类的几个方法:
4.多线程的生命周期:
5.线程的同步(解决多线程的安全问题)
前提:多个线程操作共享数据
解决方法:在其中一个线程 A 对共享数据修改的时候,其它线程必须在外面等候,
当A 线程执行完共享数据后,其它线程方可参与执行共享数据。 5.1 同步代码块
1.synchronized(对象){
*//涉及共享数据的代码
*}
5.2 同步方法
*2.public synchronized void show(){
*//涉及共享数据的代码
*}
对于非 static 的同步方法,它对应的锁是 this,即当前对象。
对于 static 的同步方法,它对应的锁是此方法所在的类。 XxxYyy.class
5.3 死锁(写程序时,需要避免的)
不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的
同步资源,就形成了线程的死锁
6.线程通信
wait() notify() notifyAll() 一定使用在同步代码块或同步方法中。
6.1 会释放同步锁的操作
线程执行同步代码块或同步方法时,程序调用Thread.sleep(Long l)、Thread.yield()方法暂停当前线程的执行
线程执行同步代码块时,其它线程调用该线程suspend()方法将该线程挂起,该线程不会释放锁(同步监视器)
尽量避免使用suspend()和resume()来控制线程
6.2 不会释放同步锁的操作
当前线程的同步方法、同步代码块执行结束
当前线程的同步方法、同步代码块遇到break、return终止该代码块、该方法的继续执行
当前线程的同步方法、同步代码块中出现了未处理Error和Exception,导致异常结束
当前线程在同步方法、同步代码块中执行了线程对象的wait()方法,当前线程暂停,并释放锁
-------------------------------- Java 常用类 -------------------------------
1.String 类 StringBuffer 类 StringBuilder 类
String 类:不可变的字符串序列
1.常用的方法
2.String 类与基本数据类型(或包装类)的转换
1)字符串---->包装类: 如:Integer.parseInt(String str) 2.包装类 ---->字符
串:String.valueOf(Xxx xxx)
3.String 类与字符数组、字节数组的转换
-
1.字节数组---->字符串: String str = new String(byte[] b);
-
2.字符串 ----->字节数组: byte[] b = str.getBytes();
*3.字符数组 ----->字符串: String str = new String(char[] c);
*4.字符串 -----> 字符数组:char[] c = str.toCharArray(); StringBuffer 是可变的字符串序列
1.相比 String 类,多了一些方法:append() reverse() insert replace()…
StringBuilder 是可变的字符串序列 : JDK1.5 新加的,处理字符串的效率更高,线程不安全的。
三者的效率测试 v(StringBuilder) > v(StringBuffer) > v(String)
2.日期类相关的
2.1 System.currentTimemillis();
2.2 Date 类 java.util 包下 Date date = new Date();date.getTime();
2.3 SimpleDateFormat 类 1.格式化:日期 Date ---->文本 2.解
析: 文本---->日期 Date
2.4 Calendar 类
3.Math BigInteger BigDecimal