关于Java 线程的运行状态
首先需要说明的是,所指状态为JVM线程状态,而非操作系统线程状态。同一时间,一个线程只会存在于一种状态。
线程状态,enum State:
1、NEW
已创建,未运行。
2、RUNNABLE
线程于JVM中运行中。
3、BLOCKED
阻塞等待 monitor lock 以进入或重新进入 synchronized 同步块或方法,由Object.wait 触发。
4、WAITING
触发方法: Object.wait、join()、 LockSupport.park
等待另外的线程执行完特定的任务。
例如:
线程执行Object.wait,等待另一线程执行完,并通过执行Object.notify 或者 Object.notifyAll来唤醒以继续执行;
线程执行Thread.join,等待特定线程执行完毕。
5、TIMED_WAITING
时限等待。
触发方法:Thread.sleep、Object.wait(timeout)、Thread.join(timeout)、LockSupport.parkNanos、LockSupport.parkUntil。
6、TERMINATED
已执行完任务的线程状态。
附注:
1、线程 Thread.getState 方法获取当前线程状态。此方法是涉及用来监控系统状态,而不是用于同步控制。
2、Unsafe.park方法挂起线程。
3、Thread.join 方法内部通过循环调用Object.wait方法来实现等待。
4、BLOCKED 状态强调是为了进入同步逻辑而等待。