-
NEW(新建):
- 含义:线程对象已经被创建,但还没有调用
start()
方法。 - 状态切换条件:调用
start()
方法后,线程从NEW
状态切换到RUNNABLE
状态。
- 含义:线程对象已经被创建,但还没有调用
-
RUNNABLE(可运行):
- 含义:线程处于可运行状态,它可能正在运行,也可能在等待 CPU 时间片。
- 状态切换条件:
- 线程从
NEW
状态调用start()
方法后进入RUNNABLE
状态。 - 线程可能因为调度程序选择它执行而处于
RUNNABLE
状态。 - 如果线程被中断或者等待资源被释放,可能会从
BLOCKED
、WAITING
或TIMED_WAITING
状态返回RUNNABLE
状态。
- 线程从
-
BLOCKED(阻塞):
- 含义:线程在等待获取一个对象的监视器锁(synchronized 块或者方法),此时线程不会运行。
- 状态切换条件:
- 线程尝试进入一个同步代码块或者方法时,如果锁被其他线程持有,线程会进入
BLOCKED
状态。 - 一旦获取到锁,线程会从
BLOCKED
状态切换到RUNNABLE
状态。
- 线程尝试进入一个同步代码块或者方法时,如果锁被其他线程持有,线程会进入
-
WAITING(等待):
- 含义:线程在等待其他线程执行特定操作(如调用
Object.wait()
方法)来唤醒它。 - 状态切换条件:
- 线程在调用
Object.wait()
方法时会进入WAITING
状态。 - 通过
notify()
或notifyAll()
方法唤醒等待的线程,线程会从WAITING
状态切换到RUNNABLE
状态。 - 线程也可能因为中断而退出
WAITING
状态,进入RUNNABLE
状态。
- 线程在调用
- 含义:线程在等待其他线程执行特定操作(如调用
-
TIMED_WAITING(计时等待):
- 含义:线程在等待特定时间后自动回到
RUNNABLE
状态,或在等待期间可能会被中断。 - 状态切换条件:
- 线程在调用
Thread.sleep(long millis)
、Object.wait(long timeout)
、Thread.join(long millis)
或LockSupport.parkNanos(long nanos)
等方法时会进入TIMED_WAITING
状态。 - 超过等待时间或调用
notify()
或notifyAll()
方法时,线程会从TIMED_WAITING
状态切换到RUNNABLE
状态。
- 线程在调用
- 含义:线程在等待特定时间后自动回到
-
TERMINATED(终止):
- 含义:线程已经完成执行或因为异常终止。
- 状态切换条件:
- 线程的
run()
方法执行完毕或者抛出未捕获的异常时,线程进入TERMINATED
状态。
- 线程的
07-11
1990
05-04
2459
06-17
4398
07-17
1755
08-04
217
07-14