Java线程状态转换
线程从新建到结束一般有5个状态,为新建、可运行、运行、阻塞、结束,其中阻塞不是必经状态!从网上找了张图,很详细的画出了线程的状态关系:
下面详细说下:
1、新建状态:就是新建了一个线程对象;
2、可运行状态:就是调用start()方法后,线程将进入一个线程池,等待系统分配资源,(注意不是说条用start()方法后,线程就被执行的,他得等待获得资源)
3、运行状态:就是系统给分配了资源(有的教材认为资源就是CPU的使用权),程序开始执行;
4、阻塞状态:由于某种原因,程序执行到某种程度时,放弃了资源的使用权,暂时停止运行。满足相应条件后,又变成可运行状态,这个由分为几种情况:
1)、等待阻塞:运行的线程执行了wait()方法;
2)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用;
3)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。
5、结束:也叫死亡状态,就是程序执行完成了,或发生异常退出run()方法了。