Ch02-Java JUC 之 线程基础
April 6, 2017
1. 线程状态 #
state | 状态 | 说明 |
---|---|---|
New | 新建 | 新创建了一个线程对象,还未调用线程的 start() 方法 |
Runnable | 就绪 | 线程对象创建后,其他线程调用了该对象的 start() 方法,该状态的线程位于可运行线程池中,变得可运行,等待获取 CPU 的使用权 |
Running | 运行 | 就绪状态的线程获取了 CPU,执行程序代码的状态,还有种可能就是这个线程正在等待其他的系统资源(IO 资源等),这种状态也称为 Running 状态 |
Blocked | 阻塞 | 一个线程因为等待监视锁而被阻塞的状态,也称之为阻塞状态。阻塞的线程不会被分配 CPU 资源 |
WAITING | 等待 | 一个正在等待的线程的状态,也称之为等待状态 |
TIMED_WAITING | 超时等待 | 一个在限定时间内等待的线程的状态。也称之为限时等待状态 |
Dead | 死亡 | 线程执行完了或者因异常退出了 run() 方法,该线程结束生命周期 (当时如果线程被持久持有,可能不会被回收) |
注意:
- WAITING: 造成线程等待的原因有三种,分别是调用 Object.wait()、join() 以及 LockSupport.park() 方法。处于等待状态的线程,正在等待其他线程去执行一个特定的操作。例如:因为 wait() 而等待的线程正在等待另一个线程去调用 notify() 或 notifyAll();一个因为 join() 而等待的线程正在等待另一个线程结束。处于等待状态的线程不会被分配 CPU 资源。
- TIMED_WAITING: 造成线程限时等待状态的原因有五种,分别是调用 Thread.sleep(long)、Object.wait(long)、join(long)、LockSupport.parkNanos(obj,long) 和 LockSupport.parkUntil(obj,long)。