java 线程——线程的状态及其状态的转换

线程的状态

NEW :新创建线程,初始态

RUNNABLE : 可运行状态,当前状态的线程位于“可运行线程池”中,变得可运行,只等待获取cpu的使用权,即当前线程获得了除cpu以外的所有资源。

RUNNING : 正在运行。此时线程获得了cpu的使用权,执行程序代码

BLOCKED:阻塞状态。线程因为某种原因放弃了cpu的使用权,暂时停止运行,直到线程进入就绪态才有机会转换到运行态。

阻塞线程分为三种:

等待阻塞:当线程调用了wait()方法之后,线程进入阻塞状态,这种情况下只有其它线程调用notify()或者notifyAll()时才会被唤醒进入就绪态。

同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则会进入同步阻塞。

其它阻塞:当进行I/o操作时,或者运行线程时调用了sleep()或join()方法时,线程阻塞,只有当I/O操作完成,sleep()时间到、join()等待线程终止时线程会变成就绪态。

WAITING : 等待状态,线程在执行的过程中调用wait()方法。

TIMED_WAITING : 计时等待。线程调用wait(time) 方法时进入计时等待,等时间到了之后线程进入就绪态。

TERMINATED : 终止状态。线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

状态的转换

猜你喜欢

转载自blog.csdn.net/Alyson_jm/article/details/82807877