线程的生命周期/状态
线程的生命周期或者说状态其实不复杂,但是很多人的理解可能有错误,一个典型的误区,线程运行时的状态是Runnable,而不是Running,因为线程没有Running状态。 线程的状态 1、New:已创建,没启动。还没有执行start() 2、Runnable:调用start()之后就处于Runnable,无论是否已经运行,都是Runnable状态,对应操作系统的Ready和Running状态。 3、Blocked:进入Synchronized修饰的方法或者代码块,但是无法获取锁,就处于Blocked。 4、Waiting:线程进入等待的阻塞状态,例如调用Object.wait()。 5、Timed-Waiting:线程进入计时等待的阻塞状态,例如调用Thread.sleep(time)。 6、Terminated:线程执行代码结束,或者出现未捕捉的异常。 PS:线程没有Running状态,请参考官方文档 :官方文档 线程的状态转换 从上图,可以明确看到状态如何进行转换,状态之间的变化是否可逆。。。 其实,从Waiting到Blocked状态可以可以的,当Waiting状态被唤醒之后,如果暂时没有获取到monitor锁,这时候就会进入Blocked状态,当获取锁之后,重新变成Runnable。Waiting和Timed-Waiting状态下在出现未捕获异常时