Engineering Full Stack Apps with Java and JavaScript
Java.lang.Object provides three methods – notify(), notifyAll() and wait () – to improve the efficiency communication between threads. You will need to understand the synchronization process in Java to understand the communication using wait, notify and notifyAll.
obj.wait()
makes a thread wait on an object (obj) until it receives a notification from a notify() or notifyAll() on the same object.
obj.notify()
sends a notification to any one waiting thread on ab object (obj) that the object lock is available.
obj.notifyAll()
sends notification to all waiting threads on an object (obj) that the object lock is available.
Methods wait, notify and notifyAll should be invoked by a thread that own this object's monitor.
You should call the above methods inside a synchronized block,
or you will get IllegalMonitorStateException.
The IllegalMonitorStateException is thrown to indicate that a thread has attempted to wait on an object's monitor or to notify other threads waiting on an object's monitor without owning the specified monitor.
The wait, notify and notifyAll methods should be used with caution for thread communication; if not used properly, it may result in deadlock.
Both sleep() and wait() methods can also be used to suspend a thread of execution for a specified time. The difference is that, when sleep() is executed inside a synchronized block, the object still holds the lock, but when wait() method is executed, it releases the lock and breaks the synchronization block, so other threads can acquire the lock.
The wait() method is used in connection with notify() or notifyAll() methods in thread communication. A waiting thread comes out of waiting when some other thread notify it using notify() or notifyAll() on the same object on which it is waiting. There is an overloaded version of the wait that takes a time as input and comes out of wait when that time is over even though no one has notified using notify() or notifyAll().
Java.lang.Object provides three methods – notify(), notifyAll() and wait () – to improve the efficiency communication between threads.