回答思路
得分点 NEW、RUNNABLE、BLOCKED、WTING、TIMED_WTING、TERMINATED 标准回答 Java线程在运行的生命周期中,在任意给定的时刻,只能处于下列6种状态之一: NEW :初始状态,线程被创建,但是还没有调用start方法。 RUNNABLE:可运行状态,线程正在JVM中执行,但是有可能在等待操作系统的调度。 BLOCKED :阻塞状态,线程正在等待获取监视器锁。 WTING :等待状态,线程正在等待其他线程的通知或中断。 TIMED_WTING:超时等待状态,在WTING的基础上增加了超时时间,即超出时间自动返回。 TERMINATED:终止状态,线程已经执行完毕。 线程在创建之后默认为初始状态,在调用start方法之后进入可运行状态,可运行状态不代表线程正在运行,它有可能正在等待操作系统的调度。进入等待状态的线程需要其他线程的通知才能返回到可运行状态,而超时等待状态相当于在等待状态的基础上增加了超时限制,除了他线程的唤醒,在超时时间到达时也会返回运行状态。此外,线程在执行同步方法时,在没有获取到锁的情况下,会进入到阻塞状态。线程在执行完run方法之后,会进入到终止状态。 加分回答 Java将操作系统中的就绪和运行两个状态合并为可运行状态(RUNNABLE)。线程阻塞于synchronized的监视器锁时会进入阻塞状态,而线程阻塞于Lock锁时进入的却是等待状态,这是因为Lock接口实现类对于阻塞的实现均使用了LockSupport类中的相关方法。