Java线程状态
在操作系统层面线程有5种状态
-
新建状态(New)
线程创建,但没有启动
新建状态->就绪状态:线程启动 -
就绪状态(Ready)
线程启动,但还没有获得CPU时间片
就绪状态->运行状态:线程获得时间片,被CPU执行 -
运行状态(Runninng)
线程被CPU执行
运行状态->就绪状态:线程时间片耗尽或者主动放弃当次时间片 -
阻塞状态(Blocked)
同步阻塞:线程尝试获得某个对象的锁但无法获得,线程进入锁池,等待锁被释放
等待阻塞:线程主动放弃对象的锁(Object的wait方法),等待对象的通知(Object的notify或notifyAll方法)。线程被通知后需要竞争获得锁后才能回到就绪状态
其他阻塞:线程进入休眠状态,等待条件达成。如I/O请求,sleep,join -
终止状态(Terminated)
线程任务结束或异常退出
在JVM层面Java的线程有6种状态
-
新建状态(New)
对应操作系统的New -
可运行状态(Runnable)
对应操作系统的Ready和Running,还包括其他阻塞中的等待I/O请求 -
阻塞状态(Blocked)
对应操作系统的同步阻塞 -
等待状态(Waiting)
对应操作系统的等待阻塞和其他阻塞中的join(不带时间) -
超时时等待状态(TimedWaiting)
对应操作系统的等待阻塞和其他阻塞中的join,sleep(带时间) -
终止状态(Terminated)
对应操作系统的Terminated