Why isn't Object.notify() a synchronized method? (original) (raw)

David Holmes david.holmes at oracle.com
Fri May 29 02:10:38 UTC 2015


On 29/05/2015 2:08 AM, Ulf Zibis wrote:

Hi all,

in the Javadoc of notify(), notifyAll() and wait(...) I read, that this methods should only be used with synchronisation on it's instance. So I'm wondering, why they don't have the synchronized modifier out of the box in Object class.

Because, as others have said, the way you use a monitor is to acquire the monitor lock, then inspect/modify mutable object state, then do a wait/notify/notifyAll as appropriate, and finally release the monitor. Making the methods themselves synchronized would be useless from a synchronization correctness perspective and would prevent coding errors from resulting in IllegalMonitorStateException.

Also I think, the following note should be moved from wait(long,int) to wait(long): /The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until either of the following two conditions has occurred:// /

* /Another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method./ * /The timeout period, specified by timeout milliseconds plus nanos nanoseconds arguments, has elapsed. /

Why would you move it when wait(long) already has the more detailed:

David

Cheers, Ulf



More information about the core-libs-dev mailing list