在Java中线程的有以下5种状态,如下所示:
线程状态 | 含义 |
---|---|
NEW | 新建状态,线程已经创建,但是没有执行start()方法 |
RUNNABLE | 可运行状态,线程可以在JVM中运行,但是还需要等待CPU分配资源 |
BLOCKED | 阻塞状态,当遇到synchronized且没有取得相应的锁,就会进入这个状态 |
WAITING | 等待状态,当线程中wait()/join/Locksupport.park方法时,就会进入这个状态 |
TIMED_WAITING | 计时等待状态,当调用Thread.sleep()或者Object.wait(xx)或者Thread.join(xx)或者LockSupport.parkNanos或者LockSupport.partUntil时,进入该状态 |
TERMINATED | 线程中断状态,线程被中断或者运行结束,就会进入这个状态 |
在上述表格中,线程的5种状态对应着Java的不同方法,具体如下图所示:
需要注意的是,在上图中标红的两个状态,是操作系统中线程对应的状态,Java将这两种状态合并为可运行状态(RUNNABLE)。在操作系统中 就绪状态(READY) 表示线程已经准备完毕,等待CPU分配时间片。运行中状态(RUNNING) 表示当线程分到时间片,线程开始正式执行。