Ch02-Java JUC 之 线程基础

Ch02-Java JUC 之 线程基础

April 6, 2017
Java | JUC
java

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)。

2. 线程状态转换 #

thread-state