Why it matters

Thread state confusion causes many concurrency bugs: assuming a thread is running when it's blocked, assuming it's blocked when it's terminated. Understanding lifecycle avoids these.

Advertisement

The architecture

Created: thread object exists but not started.

Runnable: ready to run, waiting for scheduler.

Running: currently executing on CPU.

Thread statesCreatednot startedRunnable/Runningexecuting or readyBlocked/Waitingon I/O or lockBlocked → Runnable when unblocked; scheduler picks Runnable to promote to Running
Thread state machine.
Advertisement

How it works end to end

Blocked: waiting on I/O (network, disk) or synchronization primitive (lock, condition variable).

Waiting: parked awaiting notification (wait/notify pattern).

Terminated: run method exited. Thread object still exists but can't be restarted.