线程的状态
本文是关于JAVA多线程和并发的第三篇,主要介绍一下线程的几个状态的含义。
Thread
类源码中规定了几种线程的状态:
1 | public enum State { |
其实源码中已经详细说明了这几种状态的含义以及发生的时机。下面还是再看看:
- 新建(
new
):创建后尚未启动的线程的状态 - 运行(
Runnable
):包含Running
和Ready
两种状态 - 无限期等待(
Waiting
):不会被分配CPU执行时间,需要显式被唤醒- 无
Timeout
参数的Object.wait()
方法 - 无
Timeout
参数的Thread.join()
方法 LockSupport.park()
方法
- 无
- 限期等待(
Timed Waiting
):不会被分配CPU执行时间,在一定时间后会由系统自动唤醒Thread.sleep()
方法- 设置了
Timeout
参数的Object.wait()
方法 - 设置了
Timeout
参数的Thread.join()
方法 LockSupport.parkNanos()
方法LockSupport.parkUntil()
方法
- 阻塞(
Blocked
):等待获取排他锁 - 结束(
Terminated
):已终止线程的状态,线程已经结束执行
既然有这么多线程状态,那么必然会存在状态的转换,他们的状态是如何转换的呢?下面这张图就是比较全面的状态转换图:
初学者看到这张图一张是比较晕的,各种乱七八糟的东西堆在这里实在是难以下咽,不过一开始不能完全看懂是很正常的,需要进一步地学习一些细节,不断地来回顾,总有一天就会真正理解了。
下面就是要详细说说Thread
类里面的一些方法啦,理解了这些方法,状态的切换图便一目了然。为了限制篇幅,本文先说到这里。