在 上一篇 里我们讲了一个重要状态: BLOCKED, 在这一篇章里, 我们来看另一个重要的状态: WAITING(等待).
定义
一个正在无限期等待另一个线程执行一个特别的动作的线程处于这一状态.
A thread that is waiting indefinitely for another thread to perform a particular action is in this state.
摘要: 深入探讨了 Java 线程的 WAITING 状态, 特别是对 wait/notify 的情形进行了深入分析.
摘要: 深入探讨了 Java 线程的 BLOCKED 状态, 特别是对 enter 及 reenter 两种情形进行了深入分析.
在 上一篇章 中, 我们强调了 BLOCKED 状态跟 I/O 的阻塞是不同的, 它不是一般意义上的阻塞, 而是特指被 synchronized 块阻塞, 即是跟线程同步有关的一个状态.
前面 已经说过 BLOCKED(阻塞) 的简单定义为:
一个正在阻塞等待一个监视器锁的线程处于这一状态. (A thread that is blocked waiting for a monitor lock is in this state.)
更加详细的定义可以参考 Thread.State
中的 javadoc:
/**
* Thread state for a thread blocked waiting for a monitor lock.
* A thread in the blocked state is waiting for a monitor lock
* to enter a synchronized block/method or
* reenter a synchronized block/method after calling
* {@link Object#wait() Object.wait}.
*/
BLOCKED,
摘要: 深入探讨了 Java 线程的 RUNNABLE 状态, 特别是对处在 IO 阻塞时的状态进行了深入分析.
摘要: 初步谈论了Java中的6种线程状态, 并探讨了它们与操作系统线程状态的异同.
Java 线程有 6 种状态. 在某个给定时间点上, 一个线程只能处于这 6 种状态中的一种.
这 6 种状态被明确地定义在 Thread
类的一个内部枚举类 Thread.State
中:
它们是:
NEW
(新建) A thread that has not yet started is in this state.RUNNABLE
(可运行) A thread executing in the Java virtual machine is in this state.BLOCKED
(阻塞) A thread that is blocked waiting for a monitor lock is in this state.WAITING
(等待) A thread that is waiting indefinitely for another thread to perform a particular action is in this state.TIMED_WAITING
(计时等待) A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.TERMINATED
(终止) A thread that has exited is in this state.注: 以上内容直接来自 State 类中的 Javadoc, 只对状态进行了翻译, 具体的描述后面再分析.
它上面还有个注解
@since 1.5
, 暗示了在 JDK1.5 时引入了这些定义.因此, 说有 6 种线程状态是对 1.5 及以后版本而言.
Thread 类中有一个方法 getState
, 返回的就是这里定义的状态.
可用于监控工具分析线程状态, 不作同步工具使用.