1、线程的五个阶段
创建,就绪,运行,阻塞,终止
2、Thread和Runnable的区别
1.Runnable可以避免单继承的限制。 2.线程池只能放入实现Runnable或者Callable类线程,无法直接放入继承Thread的类。 3.Runnable适合多个相同的程序代码的线程处理同一个资源。
3、wait()的作用
执行线程或者对象的wait()方法,JVM会把线程放入等待池,wait()方法会释放持有的锁。调用线程或者对象的notify或notifyAll可以进行唤醒。
注意:当前线程在调用wait()或者notify时,必须拥有该对象的同步锁,即在同步块中使用。
4、join()的作用
thread1.join();
指等待thread1线程终止才会继续执行之后的代码。
5、yield()的作用
Thread.yield();
指当前线程从运行状态切换为就绪状态。
6、阻塞状态分类
1.等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池。 2.同步阻塞:运行的线程未能获取同步锁时,JVM会把该线程放入等待池。 3.其它阻塞:运行的线程执行sleep()或者join()方法,或者发出io请求时,JVM会把该线程放入等待池。阻塞状态结束,线程会转入就绪状态。 注意:sleep()是不会释放持有的锁的。
7、线程中断
1.interrupt():中断线程。 2.interrupted():测试当前线程是否中断,线程的中断状态由该方法清除。 3.isInterrupted():测试当前线程是否中断,线程的中断状态不受该方法的影响。
当其它线程调用此线程的interrupt()方法时,会给此线程设置一个中断标志;sleep()、wait()等方法会检测这个标志,同时抛出InterruptedException,并清除线程的中断标志。sleep()、wait()方法也会提前结束。
网友评论