NOTE
6.40 Java Thread States
The six Thread.State values, what each means, and why Java thread state is not identical to an operating-system scheduler state.
This is a historical learning note and may contain outdated or incomplete understanding.
1. Thread.State
Java exposes six high-level thread states:
NEW: created but not started;RUNNABLE: executing in the JVM or eligible to run;BLOCKED: waiting to acquire a Java monitor for asynchronizedregion;WAITING: waiting indefinitely for another action;TIMED_WAITING: waiting with a deadline/timeout;TERMINATED: execution has completed.
2. Important Distinctions
RUNNABLE does not mean “currently executing on a CPU”. It combines states that the operating system may distinguish, such as actively running and runnable-but-not-scheduled.
BLOCKED has a narrow Java meaning: waiting for monitor entry. A thread waiting in LockSupport.park(), Object.wait(), or Thread.join() is represented as WAITING/TIMED_WAITING, not BLOCKED merely because it is not progressing.
3. Typical Transitions
NEW -> RUNNABLE:start();RUNNABLE -> BLOCKED: monitor acquisition contention;RUNNABLE -> WAITING:wait(), untimedjoin(),park();RUNNABLE -> TIMED_WAITING:sleep(), timedwait/join, timed park;- waiting states ->
RUNNABLE: notification, timeout, unpark, interrupt, or lock availability as appropriate; RUNNABLE -> TERMINATED:run()finishes or exits with an uncaught exception.
These are JVM-level diagnostic states. When debugging scheduling or native blocking, correlate them with OS/native-thread information rather than treating them as a complete scheduler model.