线程的状态
- New
- Runnable
- Blocked
- Waiting
- Timed waiting
- Terminated
New(新生线程):用new操作符创建的一个新线程时,该线程还没有开始运行。
Runnable(可运行线程):一个New状态的线程一旦调用start方法,该线程处于runnable状态。(在任何给定时刻,一个可运行的线程可能正在运行也可能没有运行。)
Blocked(被阻塞):一个线程在运行的过程中试图获取一个内部的对象锁,而该锁被其他线程持有,则该线程进入Blocked状态。直到所有其他线程释放该锁,并且线程调度允许本线程持有它的时候,该线程才变成非阻塞状态。
Waiting(等待):当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态在调用Object.wait()或Thread.join(),或是等待java.util.concurrent库中的Lock或Condition时,就会出现这种情况。
Timed waiting(计时等待):有几个方法有一个超时参数,调用它们导致线程进入计时等待状态。
Terminated(被终止):线程被终止,run方法正常退出而自然死亡。或是因为一个没有捕获的异常终止了run方法而意外死亡。
New是一个线程的起源,Runnable是除自身和New状态以外所有状态的基础,Blocked、Waiting、Timed waiting同Runnable状态相互转换。