Java线程的状态和状态转换
- new,
- runnable,
- timed waiting,
- waiting,
- blocked,
- terminated.

New 代表创建但是未启动的线程
runnable又可分为ready和running两个子状态,由于单个cpu同一时间只可以执行单个线程,多线程的分配是通过cpu时间片来分配的,因此有一部分线程会在等待队列,也就是ready状态。CPU的Thread scheduling(线程调度)决定着线程什么时候可以实际运行
处于runnable状态的线程在JVM层面上来看是执行中的状态。但是在操作系统层面上,或许线程在等待一些资源
Timed waiting是线程指定了特定的时间,调用一下方法的现场会进入此状态
- Thread.sleep(sleeptime)
- Object.wait(timeout)
- Thread.join(timeout)
- LockSupport.parkNanos(timeout)
- LockSupport.parkUntil(timeout)
waiting 状态是由于线程调用了以下方法
- Object.wait()
- Thread.join()
- LockSupport.park()
blocked 是当前线程无法获取synchronized 锁或者是当前锁对象调用了Object.wait()方法,这时候会进入阻塞状态
线程执行完run()方法则会进入 terminated 状态.
Java线程状态详解与转换流程

本文介绍了Java线程的六种状态:New、Runnable、Timed Waiting、Waiting、Blocked和Terminated,并详细解析了状态间的转换。New表示创建但未启动,Runnable包括Ready和Running,实际执行受CPU线程调度影响。Timed Waiting和Waiting状态涉及线程的等待与超时,Blocked状态通常因无法获取锁而发生,而Terminated是线程执行完毕后的状态。
最低0.47元/天 解锁文章
2250

被折叠的 条评论
为什么被折叠?



