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