A thread lies only in one of the shown states at any instant:

State

Description

New

  • a thread that has not yet started

Runnable

  • thread state for a runnable thread
  • a thread in runnable state might be either:
    • running
    • ready run at any instant of time

Blocked

  • 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 Object.wait()

Waiting

  • thread state for a waiting thread
  • a thread is in the waiting state due to calling one of the following methods:
    • Object.wait with no timeout
    • Thread.join with no timeout
    • LockSupport.park
  • a thread in the waiting state is waiting for another thread to perform a particular action. For example, a thread that has called Object.wait() on an object is waiting for another thread to call Object.notify() or Object.notifyAll() on that object. A thread that has called Thread.join() is waiting for a specified thread to terminate.

Timed Waiting

  • thread state for a waiting thread with a specified waiting time
  • a thread is in the timed waiting state due to calling one of the following methods with a specified positive waiting time:
    • Thread.sleep
    • Object.wait with timeout
    • Thread.join with timeout
    • LockSupport.parkNanos
    • LockSupport.parkUntil

Terminated

  • a thread terminates because of either of the following reasons:
    • Because it exits normally. This happens when the code of thread has entirely executed by the program.
    • Because there occurred some unusual erroneous event, like segmentation fault or an unhandled exception