本文旨在 浅谈线程的状态
经过前面的学习 我们可以知道 在操作系统的视角上看 进程的状态分为
- 就绪
- 阻塞
1.线程的状态
线程的状态是⼀个枚举类型Thread.State
分类如下

1.1 New
指 New 了Thread对象 还没开始start
1.2 Terminated
表示内核的线程已经结束 但是Thread的对象还存在
1.3Runnable
表示就绪 分为两种
- 线程正在CPU上执行
- 线程随时可以去CPU上执行
1.4Timed_Waiting
表示时间的阻塞 线程阻塞(不参与CPU调度 不继续执行) 阻塞的时间是有上限的
1.5 Waiting
死等 阻塞时间无上限
1.6 Blocked
是一种由于锁导致的特殊阻塞
2.线程状态的转换关系

New 一个Thread对象 还没开始执行start()
执行start后 前往cpu调度 进入Runnable 状态
此时如果使用线程休眠Sleep() 或者线程等待 Join()
则会进入Timed_Waiting状态 当休眠 或者等待的时间 到了 就会恢复Runnable状态
此时如果代码中啥也不做 例如死循环中啥也没有(见下图)

就会进入Waiting状态
当线程恢复正轨后结束 便会进入Terminated状态
具体状态分布如下

Java线程状态详解与转换
1293

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



