java的线程状态包括以下几种:
NEW
线程创建的初始状态。
RUNABLE
线程正在执行。
注意这里是java线程的状态,而非操作系统中的线程状态,因此有可能RUNABLE状态的线程正处于等待系统cpu资源的状态。
BLOCKED
线程处于等待锁的状态。当java线程为了进入synchronized代码块
等待获取monitor,或者被唤醒重新等待获取monitor
。就会进入blocked状态。
如果在实际项目中,发现大量block线程,可能就需要我们去关注是什么东西导致的锁竞争。因为大量线程处于blocked不是一个健康态。
WATING
等待某一个状态或结果,一般是由其他线程来唤醒。通过调用如下的方法,线程会进入waiting
状态。
-
Object.wait
with no timeout -
Thread.join
with no timeout LockSupport.park
TIMED_WAITING
和waiting状态基本一直,只不过在超过等待时间后会被自动唤醒。通过如下方法会进入TIMED_WAITING状态:
Thread.sleep
Object.wait with timeout
Thread.join with timeout
LockSupport.parkNanos
LockSupport.parkUntil
TERMINATED
线程执行玩任务后,就会到达终止态。
网友评论