Java 线程状态之 WAITING

摘要: 深入探讨了 Java 线程的 WAITING 状态, 特别是对 wait/notify 的情形进行了深入分析.

上一篇 里我们讲了一个重要状态: BLOCKED, 在这一篇章里, 我们来看另一个重要的状态: WAITING(等待).

java Thread.State WAITING 状态

定义

一个正在无限期等待另一个线程执行一个特别的动作的线程处于这一状态.

A thread that is waiting indefinitely for another thread to perform a particular action is in this state.

继续阅读

Java 线程状态之 BLOCKED

摘要: 深入探讨了 Java 线程的 BLOCKED 状态, 特别是对 enter 及 reenter 两种情形进行了深入分析.

上一篇章 中, 我们强调了 BLOCKED 状态跟 I/O 的阻塞是不同的, 它不是一般意义上的阻塞, 而是特指被 synchronized 块阻塞, 即是跟线程同步有关的一个状态.

BLOCKED 状态的定义

前面 已经说过 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

摘要: 深入探讨了 Java 线程的 RUNNABLE 状态, 特别是对处在 IO 阻塞时的状态进行了深入分析.

上一篇 我们粗略谈到了 Java 的 6 种线程状态, 并对其中较为简单的 NEW 和 TERMINATED 做了分析, 现在我们具体来看下 State.RUNNABLE 状态, 即所谓的可运行状态. (以下简称 runnable)

再次强调, 这里谈论的是 Java 虚拟机层面所暴露给我们的状态, 与操作系统底层的线程状态是两个不同层面的事.

具体而言, 这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态:

java Thread.State 线程枚举状态

继续阅读

关于 Java 的线程状态

摘要: 初步谈论了Java中的6种线程状态, 并探讨了它们与操作系统线程状态的异同.

Java 线程有 6 种状态. 在某个给定时间点上, 一个线程只能处于这 6 种状态中的一种.

线程状态的枚举: Thread.State

这 6 种状态被明确地定义在 Thread 类的一个内部枚举类 Thread.State 中:

java 线程状态内部枚举类 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, 返回的就是这里定义的状态.

可用于监控工具分析线程状态, 不作同步工具使用.

继续阅读