Java线程可处于以下状态之一:

  • NEW

还没被启动的线程处于此种状态。

  • RUNNABLE

正在JVM中执行的线程处于此种状态,但这种状态的线程可能会等待操作系统的其它资源,例如处理器。

  • BLOCKED

由于等待监视器锁而阻塞的线程处于此种状态。处于阻塞状态的线程会等待获取监视器锁以便进入同步方法/同步块,或者在调用Object.wait方法后重新进入同步方法/同步块。

  • WAITING

无限期地等待另一个线程执行一个特定操作的线程处于此种状态。线程会因为调用以下方法之一而进入等待状态:

    • 调用Object.wait()而不指定时间;

    • 调用Thread.join()而不指定时间;

    • 调用LockSupport.park();

例如,线程调用对象的Object.wait()方法,从而等待另一个线程调用这个对象的Object.notify()方法或Object.notifyAll()方法。调用Thread.join()方法的线程是在等待另一个特定线程终止。

  • TIMED_WAITING

等待另一个线程执行一个操作持续指定的时间的线程处于此种状态。线程由于调用以下方法之一并且传入等待时间而进入定时等待状态:

    • 调用Thread.sleep();

    • 调用Object.wait()且指定超时时间;

    • 调用Thread.join()且指定超时时间;

    • 调用LockSupport.parkNanos();

    • 调用LockSupport.parkUntil();

  • TERMINATED

已退出的线程处于此种状态。