1. NEW(新建):
- - 当线程对象被创建时,它处于新建状态。
- - 在这个阶段,操作系统资源(如CPU时间)尚未分配给线程。
- - 线程对象被创建,但还未调用 `start()` 方法。
2. RUNNABLE(可运行):
- - 一旦调用了线程对象的 `start()` 方法,线程就进入了可运行状态。
- - 在可运行状态下,线程有资格获取CPU时间片并执行任务。
- - 线程可能正在执行任务,也可能处于等待CPU调度的状态。
3. BLOCKED(阻塞):
- - 当线程在试图获取一个内部的锁时,但该锁已经被其他线程持有时,线程进入阻塞状态。
- - 比如线程在等待 `synchronized` 代码块或方法中的锁时,如果锁被其他线程持有,该线程就会被阻塞。
4. WAITING(等待):
- - 线程进入等待状态是因为在等待其他线程执行特定的操作。
- - 调用 `Object.wait()` 方法,线程会在等待队列中等待,直到其他线程调用相同对象的 `notify()` 或 `notifyAll()` 方法。
- - 调用 `Thread.join()` 方法,一个线程等待另一个线程的终止。
- - 调用 `LockSupport.park()` 方法,线程进入等待状态。
5. TIMED_WAITING(计时等待):
- - 类似于等待状态,但是具有等待一定时间后自动唤醒的特性。
- - 调用 `Thread.sleep()` 方法,线程会休眠指定的时间。
- - 调用 `Object.wait(timeout)` 方法,线程会等待一定的时间后自动唤醒。
- - 调用 `Thread.join(timeout)` 方法,一个线程等待另一个线程的终止,但最多等待一定时间。
- - 调用 `LockSupport.parkNanos()` 方法,线程进入计时等待状态。
6. TERMINATED(终止):
- - 当线程执行完任务或者由于异常情况提前退出时,线程进入终止状态。
- - 一旦线程进入终止状态,它的生命周期结束,不再运行。
- - 可以调用 `Thread.isAlive()` 方法来判断线程是否处于终止状态。