Java thread state transition, WAITING to BLOCKED, or RUNNABLE?

前端 未结 3 872
醉梦人生
醉梦人生 2021-01-30 01:43

There seems to be a discrepancy between SO consensus and nearly every Java thread state diagram on the Internet; specifically, regarding thread state transition from

3条回答
  •  醉梦人生
    2021-01-30 02:21

    Any diagram that shows a notify invocation bringing a thread from WAITING to RUNNABLE is wrong (or is using an unclarified shortcut). Once a thread gets awoken from a notify (or even from a spurious wakeup) it needs to relock the monitor of the object on which it was waiting. This is the BLOCKED state.

    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.

    This is explained in the javadoc of Object#notify():

    The awakened thread will not be able to proceed until the current thread relinquishes the lock on this object.

    and Object#wait()

    The thread then waits until it can re-obtain ownership of the monitor and resumes execution.

提交回复
热议问题