Monitor

Signal and exit vs signal and continue monitors 

What confuses me about both signal and exit and signal and continue monitors is that the distinction between Hoare semantics and Messa semantics seem to apply to both. The fact that in practice (Messa semantics), a signal -- in case of java a Notify() or a NotifyAll() -- is only a hint because it moves a thread which is currently in a blocked state on the condition variable into a runnable state but doesn't start it automatically. 

Let's recall what the documentation says about thread states: 

https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html 

BLOCKED Thread state for a thread blocked waiting for a monitor lock.
NEW Thread state for a thread which has not yet started.
RUNNABLE Thread state for a runnable thread.
TERMINATED Thread state for a terminated thread.
TIMED_WAITING Thread state for a waiting thread with a specified waiting time. 
WAITING Thread state for a waiting thread.

https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.State.html

    NEW
    A thread that has not yet started is in this state.
    RUNNABLE
    A thread executing in the Java virtual machine is in this state.
    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.
    TIMED_WAITING
    A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.
    TERMINATED
    A thread that has exited is in this state.


Remember that in Java, we don't actually call thread.run(). To quote an answer on stack overflow https://stackoverflow.com/a/19631064/227646 :
The difference is that Thread.start() starts a thread, while Runnable.run() just calls a method.

 So my guess is that the difference in semantics is a moot point in Java because it is not possible to force Hoare semantics in Java anyway. You can only put a thread in a runnable state but you can never force a thread to run immediately.