2 State of Thread(线程状态)
2019-11-02 本文已影响0人
Vander1991
2.1 线程状态简介
在java.lang.Thread.State中能清楚的看到Java中定义了6种状态:
public enum State {
/**
* Thread state for a thread which has not yet started.
*/
NEW,
/**
* Thread state for a runnable thread. A thread in the runnable
* state is executing in the Java virtual machine but it may
* be waiting for other resources from the operating system
* such as processor.
*/
RUNNABLE,
- New:尚未启动的线程的线程状态
- Runnable:可运行的线程状态,等待CPU调度
- BLOCKED:线程阻塞等待获取监视器锁的线程状态(处于synchronized同步代码块或方法中被阻塞)
- WAITING:等待线程的线程状态(不带超时的方式:Object.wait、Thread.join、LockSupport.park)
- TIMED_WAITING:具有指定等待时间的等待线程的线程状态。(带超时方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil)
- TERMINATED:终止线程的线程状态。线程正常完成执行或出现异常(接收到中断指令)
2.2 线程状态间的切换
![](https://img.haomeiwen.com/i14172892/e1207edd6adaa26a.png)
2.2.1 新建-运行-终止(示例)
![](https://img.haomeiwen.com/i14172892/b7d7f34755a805bc.png)
![](https://img.haomeiwen.com/i14172892/11560bd7087ff485.png)
2.2.2 新建->运行->等待->运行->终止(示例)
![](https://img.haomeiwen.com/i14172892/36fd897f15f6b734.png)
![](https://img.haomeiwen.com/i14172892/27a0b5ecc59dc13f.png)
2.2.3 新建->运行->阻塞->运行->终止(示例)
![](https://img.haomeiwen.com/i14172892/94fa7481b2324ad6.png)
![](https://img.haomeiwen.com/i14172892/132563eefc88696c.png)
这里主线程等待200ms的时候,主线程拿到ThreadStateSwitch的对象锁是没有被释放的,在blockThreadState的方法中的同步块运行完之后,thread3才能拿到对象锁。