Wait, Notify and NotifyAll Methods of the Object Class

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.

 

Important points on wait, notify and notifyAll

  1. 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.

  2. The wait, notify and notifyAll methods should be used with caution for thread communication; if not used properly, it may result in deadlock.

 

Sleep vs Wait

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. 

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)