java并发编程系列基础篇--线程的状态

前言

多线程的编程中,要想熟练的运用线程来完成某些任务,那么就需要了解线程的运行状态以及在必要的时候合理的对线程进行中断,这样才能够达到提高程序的执行效率。

线程的状态

线程的状态可以从Thread类的源码中看出,它包括六种状态:新建状态(NEW)、可运行状态(RUNNABLE)、阻塞状态(BLOCKED)、等待状态(WAITING)、有限等待状态(TIMED_WAITING)、终止状态(TERMINATED)。
下面我们来看一下,线程这几种状态的转化。
线程状态转换
新建状态--当线程被new Thread()的时候,当前线程就会处于一个NEW的状态。
可运行状态--当线程调用了start()方法后,当前线程就处于RUNNABLE状态,等待CPU分配时间片来执行当前线程的run方法。一旦被分配了时间片,它就会真正的执行线程任务,也就是图中的RUNNING状态(这个状态只是为了表明当前线程来执行,实际的Thread类中没有此状态,当线程在运行时,它的状态是RUNNABEL)。
阻塞状态--当线程1与其他线程在争夺锁资源时没有抢到锁,那么线程1就会处于一个BLOCKED状态。
等待状态--当线程调用了Thread.join()方法或者LockSupport.park()方法,当前线程就会处于WAITING状态;如果当前线程争抢到了锁,调用了wait()方法,那么线程也会处于WAITING状态,并且释放当前锁。
有限等待状态--当线程调用了sleep(100)方法(<font color="#dd0000"它不会使线程释放掉锁)、Object.wait(100)、LockSupport.parkNanos(10)带有具体等待时间的方法时,线程会处于TIMED-WAITING状态。
终止状态--当线程任务执行完毕、main方法执行完毕或者异常退出,则线程状态变为TERMINATED状态。

原文地址:https://www.cnblogs.com/mr-ziyoung/p/13589314.html