Difference between WAIT and BLOCKED thread states

More Than Five picture More Than Five · Mar 28, 2013 · Viewed 70.5k times · Source

What is the difference between thread state WAIT and thread state BLOCKED?

The Thread.State documentation:

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

does not explain the difference to me.

Answer

Flavio picture Flavio · Mar 28, 2013

The difference is relatively simple.

In the BLOCKED state, a thread is about to enter a synchronized block, but there is another thread currently running inside a synchronized block on the same object. The first thread must then wait for the second thread to exit its block.

In the WAITING state, a thread is waiting for a signal from another thread. This happens typically by calling Object.wait(), or Thread.join(). The thread will then remain in this state until another thread calls Object.notify(), or dies.