本文章是Java多线程系列的一篇文章,其他文章:
Java多线程:锁的底层实现
Java多线程:synchronized和volatile
Java多线程:JUC包-锁的封装
Java多线程:Thread的使用,以及wait(),notify(),notifyAll()
Java多线程:线程池
一、Thread的状态
在Thread类的1750行左右定义了Thread的状态枚举(源码注释简单易懂,建议直接去看源码):
public enum State {
//Thread被创建至今还没有启动
NEW,
//可运行线程的线程状态。当start()方法被调用时,线程就进入RUNNABLE状态。
//此时的线程可能正在运行,也可能在等待操作系统的 其他资源(如处理器)
RUNNABLE,
// 线程由于等待监视器锁而被阻塞在进入同步块/方法的过程中,或者因调用`Object.wait()`方法重入同步块/方法
BLOCKED,
//由于调用Object.wait或Thread.join或LockSupport.park而进入等待状态
//等待状态的线程通常是在等待其他线程完成工作,如调用了Thread.join()的线程正在等待指定的线程终止
WAITING,
//带有等待时间的WAITING状态。通常是由于被调用了如下方法:
//Thread.sleep
//Object.wait with timeout
//Thread.join with timeout
//LockSupport.parkNanos
//LockSupport.parkUntil
TIMED_WAITING,
//线程已结束
TERMINATED;
}
下面是线程状态的转换图(为了便于理解,加了一个RUNNING状态,即线程获取到了CPU时间片时的状态)