Tutorial

Java Thread wait, notify and notifyAll Example

Published on August 3, 2022
author

Pankaj

Java Thread wait, notify and notifyAll Example

The Object class in java contains three final methods that allows threads to communicate about the lock status of a resource. These methods are wait(), notify() and notifyAll(). So today we will look into wait, notify and notifyAll in java program.

wait, notify and notifyAll in Java

wait and notify in java, wait notify and notifyAll in java, wait notify example, java thread wait The current thread which invokes these methods on any object should have the object monitor else it throws java.lang.IllegalMonitorStateException exception.

wait

Object wait methods has three variance, one which waits indefinitely for any other thread to call notify or notifyAll method on the object to wake up the current thread. Other two variances puts the current thread in wait for specific amount of time before they wake up.

notify

notify method wakes up only one thread waiting on the object and that thread starts execution. So if there are multiple threads waiting for an object, this method will wake up only one of them. The choice of the thread to wake depends on the OS implementation of thread management.

notifyAll

notifyAll method wakes up all the threads waiting on the object, although which one will process first depends on the OS implementation. These methods can be used to implement producer consumer problem where consumer threads are waiting for the objects in Queue and producer threads put object in queue and notify the waiting threads. Let’s see an example where multiple threads work on the same object and we use wait, notify and notifyAll methods.

Message

A java bean class on which threads will work and call wait and notify methods.

package com.journaldev.concurrency;

public class Message {
    private String msg;
    
    public Message(String str){
        this.msg=str;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String str) {
        this.msg=str;
    }

}

Waiter

A class that will wait for other threads to invoke notify methods to complete it’s processing. Notice that Waiter thread is owning monitor on Message object using synchronized block.

package com.journaldev.concurrency;

public class Waiter implements Runnable{
    
    private Message msg;
    
    public Waiter(Message m){
        this.msg=m;
    }

    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        synchronized (msg) {
            try{
                System.out.println(name+" waiting to get notified at time:"+System.currentTimeMillis());
                msg.wait();
            }catch(InterruptedException e){
                e.printStackTrace();
            }
            System.out.println(name+" waiter thread got notified at time:"+System.currentTimeMillis());
            //process the message now
            System.out.println(name+" processed: "+msg.getMsg());
        }
    }

}

Notifier

A class that will process on Message object and then invoke notify method to wake up threads waiting for Message object. Notice that synchronized block is used to own the monitor of Message object.

package com.journaldev.concurrency;

public class Notifier implements Runnable {

    private Message msg;
    
    public Notifier(Message msg) {
        this.msg = msg;
    }

    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        System.out.println(name+" started");
        try {
            Thread.sleep(1000);
            synchronized (msg) {
                msg.setMsg(name+" Notifier work done");
                msg.notify();
                // msg.notifyAll();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
    }

}

WaitNotifyTest

Test class that will create multiple threads of Waiter and Notifier and start them.

package com.journaldev.concurrency;

public class WaitNotifyTest {

    public static void main(String[] args) {
        Message msg = new Message("process it");
        Waiter waiter = new Waiter(msg);
        new Thread(waiter,"waiter").start();
        
        Waiter waiter1 = new Waiter(msg);
        new Thread(waiter1, "waiter1").start();
        
        Notifier notifier = new Notifier(msg);
        new Thread(notifier, "notifier").start();
        System.out.println("All the threads are started");
    }

}

When we will invoke the above program, we will see below output but program will not complete because there are two threads waiting on Message object and notify() method has wake up only one of them, the other thread is still waiting to get notified.

waiter waiting to get notified at time:1356318734009
waiter1 waiting to get notified at time:1356318734010
All the threads are started
notifier started
waiter waiter thread got notified at time:1356318735011
waiter processed: notifier Notifier work done

If we comment the notify() call and uncomment the notifyAll() call in Notifier class, below will be the output produced.

waiter waiting to get notified at time:1356318917118
waiter1 waiting to get notified at time:1356318917118
All the threads are started
notifier started
waiter1 waiter thread got notified at time:1356318918120
waiter1 processed: notifier Notifier work done
waiter waiter thread got notified at time:1356318918120
waiter processed: notifier Notifier work done

Since notifyAll() method wake up both the Waiter threads and program completes and terminates after execution. That’s all for wait, notify and notifyAll in java.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the author(s)

Category:
Tutorial
Tags:

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
August 21, 2013

Why wait(),notify(),notifyAll() are in object class?please reply…Thanks

- Nitya

JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
March 23, 2014

In inter thread communication, all the thread share locks among them and every object has one lock. All these 3 final methods are related to lock and object has a lock.

- Divya

    JournalDev
    DigitalOcean Employee
    DigitalOcean Employee badge
    May 1, 2020

    In Java every Object has a monitor and wait, notify methods are used to wait for the Object monitor or to notify other threads that Object monitor is free now. There is no monitor on threads in java and synchronization can be used with any Object, that’s why it’s part of Object class so that every class in java has these essential methods for inter thread communication.

    - Manjunath

      JournalDev
      DigitalOcean Employee
      DigitalOcean Employee badge
      October 11, 2013

      The program is good but in that on miss take we have to set the wait time in waiter class other wise it will go for idel sleep time. so in that we have to set the time.

      - sandeep

        JournalDev
        DigitalOcean Employee
        DigitalOcean Employee badge
        November 8, 2013

        thank you very much.It is really helpful

        - Rajendra Verma

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          November 19, 2013

          i have a doubt here… In waiter class,waiter got a lock on msg object using synchronized(msg).Now waiter1 has been started also…How can waiter1 get the lock again on msg object using synchronized(msg) when waiter is already holding lock on msg object

          - Ruhina

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          November 20, 2013

          When msg.wait() method is called, Waiter threads are releasing the lock on msg. Now when notify() method is called in Notifier thread, only one of the thread gets notified and other threads are in wait state. When notifyAll() method is called, all the waiter threads are getting notified and then one of them gets the lock on msg and process. Once the first waiter thread releases the lock on msg, second thread gets the lock and completes it’s processing.

          - Pankaj

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          February 1, 2014

          What happens when “notifier” Thread started first according JVM specifications order of execution of threads may not be in the order of calling. some times, I am facing same issue. could you help me please.

          - mahendar reddy

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          February 1, 2014

          If notified thread is execute first, obviously none of the threads will get notified and program will not terminate.

          - Pankaj

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          February 3, 2014

          Thanks of explanation. is there any way we can make program to tell execute waiter thread first ,then waiter1 and notifier. Could you provide example on volatile variable.

          - mahendar reddy

            JournalDev
            DigitalOcean Employee
            DigitalOcean Employee badge
            December 2, 2019

            This is the flaw in this program because once waiter1 has a lock on msg Then again the lock on msg can’t be given on msg again For this we jave to create one more object msg2 of Message type to give lock to waiter2.

            - Ravi Prakash

              JournalDev
              DigitalOcean Employee
              DigitalOcean Employee badge
              December 12, 2013

              Thanks sir…it was realyyyyyy helpful…god bless u for ur effort

              - Jaykishan

                JournalDev
                DigitalOcean Employee
                DigitalOcean Employee badge
                January 20, 2014

                Thanks a lot for making it simple to understand

                - Rudi

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  April 25, 2014

                  Thanks a lot… It really cleared my confusion

                  - Anind

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    May 9, 2014

                    Excellent examples… continue more on collections…if you have blogs already please give link here Thanks & Regards, Vignesh Kanna M S/w Eng, Chennai, India.

                    - Vignesh Kanna M

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    May 10, 2014

                    check the footer links, you will find tutorial on collections.

                    - Pankaj

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    December 15, 2014

                    Hi Pankaj, Thank u for ur example program. Instead of calling msg.notify(), if i call “notify()”, getting “java.lang.IllegalMonitorStateException”… . Could u explain this plz

                    - Guru

                      JournalDev
                      DigitalOcean Employee
                      DigitalOcean Employee badge
                      December 2, 2019

                      The two threads waiter1 and waiter2 both are getting the lock on same object that is msg. We can’t get lock on single object together. Please correct this part here.

                      - Ravi Prakash

                        JournalDev
                        DigitalOcean Employee
                        DigitalOcean Employee badge
                        May 13, 2014

                        Thanks for this article. Really helpful for freshers and experienced people. In your next article please come up with some real time scenarios which you have faced in development in the next article through which increases in clarity of concept.

                        - Nanda

                          JournalDev
                          DigitalOcean Employee
                          DigitalOcean Employee badge
                          June 6, 2014

                          Hi pankaj and All, i have one requirement in threads. Requirement: i have three threads.so how to make sure that one thread is exeucted after another.ie thread1 followed bye thread two =>is followed by threade three. please help me

                          - chandu

                          JournalDev
                          DigitalOcean Employee
                          DigitalOcean Employee badge
                          November 22, 2014

                          Don’t use multiple threads. Just do the work that you want done by thread 1 followed by the work you want done by thread2 followed by the work you want done by thread 3. Make it synchronous … why add the complexity of Threading, when you don’t need parallel processing?

                          - Mark Gonzalez

                            JournalDev
                            DigitalOcean Employee
                            DigitalOcean Employee badge
                            June 6, 2014

                            how to make sure that one thread is executed onther(multiple threads).

                            - chandu

                            JournalDev
                            DigitalOcean Employee
                            DigitalOcean Employee badge
                            June 16, 2014

                            Use join. Next thread will wait till previous thread finish its work on which join was called.

                            - aly

                            JournalDev
                            DigitalOcean Employee
                            DigitalOcean Employee badge
                            October 9, 2014

                            First and main difference between notify() and notifyAll() method is that, if multiple thread is waiting on any lock in Java, notify only inform one of waiting thread while notifyAll informs all threads waiting on that lock.

                            - abinaya

                              JournalDev
                              DigitalOcean Employee
                              DigitalOcean Employee badge
                              December 31, 2014

                              Simple and Clear Explanation. Thank You !

                              - Sudarsan

                                JournalDev
                                DigitalOcean Employee
                                DigitalOcean Employee badge
                                January 5, 2015

                                Thanks a lot for your great job share java to us. In this article, Other two variances puts the current thread in ‘wait’ for specific amount of time before ‘they’ wake up. Maybe it should be ‘it’ wake up? Or puts the current thread in ‘wait sets’? Looking forward to your response!

                                - byboating

                                  JournalDev
                                  DigitalOcean Employee
                                  DigitalOcean Employee badge
                                  January 9, 2015

                                  Hi Sir, Could you share or refer some code of how wait , join , notify used in project . even though i have go through the tutorials and understand what you said, however, i have no idea how to put these into my project.

                                  - Paul Yang

                                    JournalDev
                                    DigitalOcean Employee
                                    DigitalOcean Employee badge
                                    February 13, 2015

                                    Thankyou for the tutorial. I have read that we should always use wait in loop ., to prevent false notification . If I am wrong .Please let me know…

                                    - rajesh

                                    JournalDev
                                    DigitalOcean Employee
                                    DigitalOcean Employee badge
                                    July 14, 2015

                                    u r talking about finite wait because wait() is blocking call while(true){ obj.wait(time in ms) }

                                    - navinm

                                      JournalDev
                                      DigitalOcean Employee
                                      DigitalOcean Employee badge
                                      April 28, 2015

                                      Thanks. Its a very nice example…

                                      - Abha

                                        JournalDev
                                        DigitalOcean Employee
                                        DigitalOcean Employee badge
                                        May 21, 2015

                                        Excellent example… waited for long time to see such example.

                                        - vijayaraja

                                          JournalDev
                                          DigitalOcean Employee
                                          DigitalOcean Employee badge
                                          June 10, 2015

                                          Straight forward example thanks a lot.

                                          - Pruthvi Raj

                                            JournalDev
                                            DigitalOcean Employee
                                            DigitalOcean Employee badge
                                            June 21, 2015

                                            I am confused that waiter and notifier all use “sychronized” on the same “msg” object. It seems that the syschronized code block will block the thread, and there should be only 1 of the 3 threads fetch the msg object at any time. But, in fact things don’t go on as my imagination, and 3 threads can reach synchronized code cocurrently… please explain this, thansk a lot~

                                            - lz

                                            JournalDev
                                            DigitalOcean Employee
                                            DigitalOcean Employee badge
                                            August 4, 2015

                                            This post should give you the answer your are looking for : https://stackoverflow.com/questions/2779484/why-must-wait-always-be-in-synchronized-block

                                            - Odp

                                              JournalDev
                                              DigitalOcean Employee
                                              DigitalOcean Employee badge
                                              July 21, 2015

                                              Simply Superb!!

                                              - Raghava

                                                JournalDev
                                                DigitalOcean Employee
                                                DigitalOcean Employee badge
                                                June 6, 2014

                                                how to make sure that one thread is executed onther(multiple threads).

                                                - chandu

                                                JournalDev
                                                DigitalOcean Employee
                                                DigitalOcean Employee badge
                                                June 16, 2014

                                                Use join. Next thread will wait till previous thread finish its work on which join was called.

                                                - aly

                                                JournalDev
                                                DigitalOcean Employee
                                                DigitalOcean Employee badge
                                                October 9, 2014

                                                First and main difference between notify() and notifyAll() method is that, if multiple thread is waiting on any lock in Java, notify only inform one of waiting thread while notifyAll informs all threads waiting on that lock.

                                                - abinaya

                                                  JournalDev
                                                  DigitalOcean Employee
                                                  DigitalOcean Employee badge
                                                  December 31, 2014

                                                  Simple and Clear Explanation. Thank You !

                                                  - Sudarsan

                                                    JournalDev
                                                    DigitalOcean Employee
                                                    DigitalOcean Employee badge
                                                    January 5, 2015

                                                    Thanks a lot for your great job share java to us. In this article, Other two variances puts the current thread in ‘wait’ for specific amount of time before ‘they’ wake up. Maybe it should be ‘it’ wake up? Or puts the current thread in ‘wait sets’? Looking forward to your response!

                                                    - byboating

                                                      JournalDev
                                                      DigitalOcean Employee
                                                      DigitalOcean Employee badge
                                                      January 9, 2015

                                                      Hi Sir, Could you share or refer some code of how wait , join , notify used in project . even though i have go through the tutorials and understand what you said, however, i have no idea how to put these into my project.

                                                      - Paul Yang

                                                        JournalDev
                                                        DigitalOcean Employee
                                                        DigitalOcean Employee badge
                                                        February 13, 2015

                                                        Thankyou for the tutorial. I have read that we should always use wait in loop ., to prevent false notification . If I am wrong .Please let me know…

                                                        - rajesh

                                                        JournalDev
                                                        DigitalOcean Employee
                                                        DigitalOcean Employee badge
                                                        July 14, 2015

                                                        u r talking about finite wait because wait() is blocking call while(true){ obj.wait(time in ms) }

                                                        - navinm

                                                          JournalDev
                                                          DigitalOcean Employee
                                                          DigitalOcean Employee badge
                                                          April 28, 2015

                                                          Thanks. Its a very nice example…

                                                          - Abha

                                                            JournalDev
                                                            DigitalOcean Employee
                                                            DigitalOcean Employee badge
                                                            May 21, 2015

                                                            Excellent example… waited for long time to see such example.

                                                            - vijayaraja

                                                              JournalDev
                                                              DigitalOcean Employee
                                                              DigitalOcean Employee badge
                                                              June 10, 2015

                                                              Straight forward example thanks a lot.

                                                              - Pruthvi Raj

                                                                JournalDev
                                                                DigitalOcean Employee
                                                                DigitalOcean Employee badge
                                                                June 21, 2015

                                                                I am confused that waiter and notifier all use “sychronized” on the same “msg” object. It seems that the syschronized code block will block the thread, and there should be only 1 of the 3 threads fetch the msg object at any time. But, in fact things don’t go on as my imagination, and 3 threads can reach synchronized code cocurrently… please explain this, thansk a lot~

                                                                - lz

                                                                JournalDev
                                                                DigitalOcean Employee
                                                                DigitalOcean Employee badge
                                                                August 4, 2015

                                                                This post should give you the answer your are looking for : https://stackoverflow.com/questions/2779484/why-must-wait-always-be-in-synchronized-block

                                                                - Odp

                                                                  JournalDev
                                                                  DigitalOcean Employee
                                                                  DigitalOcean Employee badge
                                                                  July 21, 2015

                                                                  Simply Superb!!

                                                                  - Raghava

                                                                    JournalDev
                                                                    DigitalOcean Employee
                                                                    DigitalOcean Employee badge
                                                                    June 6, 2014

                                                                    how to make sure that one thread is executed onther(multiple threads).

                                                                    - chandu

                                                                    JournalDev
                                                                    DigitalOcean Employee
                                                                    DigitalOcean Employee badge
                                                                    June 16, 2014

                                                                    Use join. Next thread will wait till previous thread finish its work on which join was called.

                                                                    - aly

                                                                    JournalDev
                                                                    DigitalOcean Employee
                                                                    DigitalOcean Employee badge
                                                                    October 9, 2014

                                                                    First and main difference between notify() and notifyAll() method is that, if multiple thread is waiting on any lock in Java, notify only inform one of waiting thread while notifyAll informs all threads waiting on that lock.

                                                                    - abinaya

                                                                      JournalDev
                                                                      DigitalOcean Employee
                                                                      DigitalOcean Employee badge
                                                                      December 31, 2014

                                                                      Simple and Clear Explanation. Thank You !

                                                                      - Sudarsan

                                                                        JournalDev
                                                                        DigitalOcean Employee
                                                                        DigitalOcean Employee badge
                                                                        January 5, 2015

                                                                        Thanks a lot for your great job share java to us. In this article, Other two variances puts the current thread in ‘wait’ for specific amount of time before ‘they’ wake up. Maybe it should be ‘it’ wake up? Or puts the current thread in ‘wait sets’? Looking forward to your response!

                                                                        - byboating

                                                                          JournalDev
                                                                          DigitalOcean Employee
                                                                          DigitalOcean Employee badge
                                                                          January 9, 2015

                                                                          Hi Sir, Could you share or refer some code of how wait , join , notify used in project . even though i have go through the tutorials and understand what you said, however, i have no idea how to put these into my project.

                                                                          - Paul Yang

                                                                            JournalDev
                                                                            DigitalOcean Employee
                                                                            DigitalOcean Employee badge
                                                                            February 13, 2015

                                                                            Thankyou for the tutorial. I have read that we should always use wait in loop ., to prevent false notification . If I am wrong .Please let me know…

                                                                            - rajesh

                                                                            JournalDev
                                                                            DigitalOcean Employee
                                                                            DigitalOcean Employee badge
                                                                            July 14, 2015

                                                                            u r talking about finite wait because wait() is blocking call while(true){ obj.wait(time in ms) }

                                                                            - navinm

                                                                              JournalDev
                                                                              DigitalOcean Employee
                                                                              DigitalOcean Employee badge
                                                                              April 28, 2015

                                                                              Thanks. Its a very nice example…

                                                                              - Abha

                                                                                JournalDev
                                                                                DigitalOcean Employee
                                                                                DigitalOcean Employee badge
                                                                                May 21, 2015

                                                                                Excellent example… waited for long time to see such example.

                                                                                - vijayaraja

                                                                                  JournalDev
                                                                                  DigitalOcean Employee
                                                                                  DigitalOcean Employee badge
                                                                                  June 10, 2015

                                                                                  Straight forward example thanks a lot.

                                                                                  - Pruthvi Raj

                                                                                    JournalDev
                                                                                    DigitalOcean Employee
                                                                                    DigitalOcean Employee badge
                                                                                    June 21, 2015

                                                                                    I am confused that waiter and notifier all use “sychronized” on the same “msg” object. It seems that the syschronized code block will block the thread, and there should be only 1 of the 3 threads fetch the msg object at any time. But, in fact things don’t go on as my imagination, and 3 threads can reach synchronized code cocurrently… please explain this, thansk a lot~

                                                                                    - lz

                                                                                    JournalDev
                                                                                    DigitalOcean Employee
                                                                                    DigitalOcean Employee badge
                                                                                    August 4, 2015

                                                                                    This post should give you the answer your are looking for : https://stackoverflow.com/questions/2779484/why-must-wait-always-be-in-synchronized-block

                                                                                    - Odp

                                                                                      JournalDev
                                                                                      DigitalOcean Employee
                                                                                      DigitalOcean Employee badge
                                                                                      July 21, 2015

                                                                                      Simply Superb!!

                                                                                      - Raghava

                                                                                        JournalDev
                                                                                        DigitalOcean Employee
                                                                                        DigitalOcean Employee badge
                                                                                        October 7, 2015

                                                                                        Very lucid explanation. I visit this site every time I find any concept difficult to understand. Thanks a lot !!!

                                                                                        - Vidita

                                                                                          JournalDev
                                                                                          DigitalOcean Employee
                                                                                          DigitalOcean Employee badge
                                                                                          November 12, 2015

                                                                                          package two; public class balance { int currentBalance; public balance(int currentBalance){ this.currentBalance=currentBalance; } public void add(int currentBalance){ this.currentBalance=currentBalance; currentBalance++; } public void deduct(int currentBalance){ this.currentBalance=currentBalance; currentBalance–; } public int showBalance(){ return currentBalance; } } ---------------------------------------------------------------------------------------------------------------------------------------- package two; public class waiter implements Runnable{ private balance bal; int currentBalance= bal.showBalance(); public waiter(balance bal){ this.bal= bal; } @Override public void run() { synchronized (bal){ String name= Thread.currentThread().getName(); System.out.println(name); System.out.println(bal.showBalance()); System.out.println(“in waiter thread waiting for notification”); try { bal.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(“waiting over now processing”); for (int i=0;i<10;i++){ bal.add(currentBalance); } }} } ----------------------------------------------------------------------------------------------------------------------------------------- package two; public class notifier implements Runnable { private balance bal; int currentBalance= bal.showBalance(); public notifier(balance bal){ this.bal= bal; } @Override public void run() { synchronized (bal){ String name= Thread.currentThread().getName(); System.out.println(name); System.out.println(bal.showBalance()); System.out.println(“in notifier thread”); for (int i=0;i<10;i++){ bal.add(currentBalance); } bal.notifyAll(); } } } --------------------------------------------------------------------------------------------------------------------------------------- package two; public class balcheck { public static void main(String args[]) { balance bal = new balance(10); Thread notifiere= new Thread(new notifier(bal)); notifiere.start(); Thread waiterre= new Thread(new waiter(bal)); waiterre.start(); } } ----------------------------------------------------------------------------------------------------------------------------------------- Hi Pankaj, Can you please help me to debug it, I am getting the following error:: Exception in thread “main” java.lang.NullPointerException at two.notifier.(notifier.java:5) at two.balcheck.main(balcheck.java:6)

                                                                                          - Rahul

                                                                                          JournalDev
                                                                                          DigitalOcean Employee
                                                                                          DigitalOcean Employee badge
                                                                                          December 16, 2015

                                                                                          Hi int currentBalance= bal.showBalance(); in the init , “bal” is null , when u try to initalize currentBalance , u will get NullPointerException

                                                                                          - Guest

                                                                                            JournalDev
                                                                                            DigitalOcean Employee
                                                                                            DigitalOcean Employee badge
                                                                                            March 2, 2016

                                                                                            Hi This is good example explaining thread communication.You can make it better if you introduce pause in main method after creating waiter thread because when I tried your example main thread was creating notifier thread before waiter thread. Here is new main method .I have put main thread to sleep fo 3 seconds giving time for waiter threads to start. public class WaitNotifyTest { public static void main(String[] args) { Message msg = new Message(“process it”); Waiter waiter = new Waiter(msg); new Thread(waiter, “waiter”).start(); Waiter waiter1 = new Waiter(msg); new Thread(waiter1, “waiter1”).start(); // Allow waiter threads to start try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } Notifier notifier = new Notifier(msg); new Thread(notifier, “notifier”).start(); System.out.println(“All the threads are started”); } }

                                                                                            - Rishabh Kashyap

                                                                                              JournalDev
                                                                                              DigitalOcean Employee
                                                                                              DigitalOcean Employee badge
                                                                                              March 18, 2016

                                                                                              how come another waiter thread enter the synchronized block,if already a waiter thread is waiting in that block? please explain I have tested with other examples and all other threads seem to wait to enter the synchronized block when one of the threads is in synchronized block and the new thread enters the synchronized block right after the old one leaves the block

                                                                                              - Sriharsha

                                                                                              JournalDev
                                                                                              DigitalOcean Employee
                                                                                              DigitalOcean Employee badge
                                                                                              September 5, 2016

                                                                                              Hello Sriharsha, When we call wait method on the object, current thread goes in waiting state, and during wait period it gives away lock so that other thread in Runnable pool can get a chance to execute who were waiting to acquire lock on object, Synchronized block assures that there will be only one thread a time in the synchronized block, and when thread goes in waiting state by calling wait method it no more holds lock on object. I hope this clarifies your doubt.

                                                                                              - Likhit Gatagat

                                                                                              JournalDev
                                                                                              DigitalOcean Employee
                                                                                              DigitalOcean Employee badge
                                                                                              September 11, 2016

                                                                                              Thanks Likhit.It clarified my doubt

                                                                                              - Sriharsha

                                                                                                JournalDev
                                                                                                DigitalOcean Employee
                                                                                                DigitalOcean Employee badge
                                                                                                November 14, 2019

                                                                                                Likhit Gatagat Very nice explanation this clarifies my doubt too.

                                                                                                - sagar

                                                                                                  JournalDev
                                                                                                  DigitalOcean Employee
                                                                                                  DigitalOcean Employee badge
                                                                                                  November 20, 2016

                                                                                                  what if notify thread gets the CPU first ?

                                                                                                  - mayank sharma

                                                                                                    JournalDev
                                                                                                    DigitalOcean Employee
                                                                                                    DigitalOcean Employee badge
                                                                                                    March 31, 2017

                                                                                                    ‘msg’ field in Waiter and Notifier are different instances. How come notify call on ‘msg’ of Notifier will notify ‘msg’ of Waiter?

                                                                                                    - Niraj

                                                                                                    JournalDev
                                                                                                    DigitalOcean Employee
                                                                                                    DigitalOcean Employee badge
                                                                                                    April 8, 2017

                                                                                                    ‘pass by reference’

                                                                                                    - Anirudh Kanth

                                                                                                      JournalDev
                                                                                                      DigitalOcean Employee
                                                                                                      DigitalOcean Employee badge
                                                                                                      April 8, 2017

                                                                                                      There is one edge case scenario though in above example. If notifier calls notify(), it will wake up single waiter thread, either waiter or waiter2. We must call notifyAll() in such cases or the other thread will keep waiting.

                                                                                                      - Anirudh Kanth

                                                                                                        JournalDev
                                                                                                        DigitalOcean Employee
                                                                                                        DigitalOcean Employee badge
                                                                                                        April 12, 2017

                                                                                                        Nice. Never marked so well the difference between notify() & notifyAll()

                                                                                                        - Aditya Rewari

                                                                                                          JournalDev
                                                                                                          DigitalOcean Employee
                                                                                                          DigitalOcean Employee badge
                                                                                                          May 7, 2017

                                                                                                          Which thread will be invoked after notify and notifyAll is this details stored anywhere if yes then where?

                                                                                                          - Bhavesh Vani

                                                                                                            JournalDev
                                                                                                            DigitalOcean Employee
                                                                                                            DigitalOcean Employee badge
                                                                                                            May 17, 2017

                                                                                                            nice tutorial

                                                                                                            - Simmant

                                                                                                              JournalDev
                                                                                                              DigitalOcean Employee
                                                                                                              DigitalOcean Employee badge
                                                                                                              June 21, 2017

                                                                                                              This will not work all the time. If the notifier thread get the lock first, its notify call will be ignored and other threads will always be waiting.

                                                                                                              - Java Dev

                                                                                                              JournalDev
                                                                                                              DigitalOcean Employee
                                                                                                              DigitalOcean Employee badge
                                                                                                              July 17, 2017

                                                                                                              True, :D :D

                                                                                                              - Test

                                                                                                              JournalDev
                                                                                                              DigitalOcean Employee
                                                                                                              DigitalOcean Employee badge
                                                                                                              July 19, 2017

                                                                                                              to void this do following. Thread.sleep(1000); Notifier notifier = new Notifier(msg);

                                                                                                              - Swapnil Y Patil

                                                                                                                JournalDev
                                                                                                                DigitalOcean Employee
                                                                                                                DigitalOcean Employee badge
                                                                                                                January 20, 2018

                                                                                                                The wait() method has to be invoked in a loop, right?

                                                                                                                - Vignesh M

                                                                                                                  JournalDev
                                                                                                                  DigitalOcean Employee
                                                                                                                  DigitalOcean Employee badge
                                                                                                                  February 28, 2018

                                                                                                                  Hi Pankaj, Can you also please explain the usage of Condition methods in place of wait(), notify() and notifyAll()?

                                                                                                                  - Mahdavi

                                                                                                                    JournalDev
                                                                                                                    DigitalOcean Employee
                                                                                                                    DigitalOcean Employee badge
                                                                                                                    September 4, 2018

                                                                                                                    Hey, still on the Notify exaple (notiftyAll commented out). How can I check something like “if one of them is stuck, release it”? I tried the following: if (t1.isAlive() ^ t2.isAlive) // one of them is alive and the other finished msg.notify(); But that doesn’t really do anything. (What I’m asking is, how to terminate the program “safely” because we know for sure some thread is stuck. Also, is this a case of starvation?)

                                                                                                                    - Yoad

                                                                                                                      JournalDev
                                                                                                                      DigitalOcean Employee
                                                                                                                      DigitalOcean Employee badge
                                                                                                                      November 2, 2018

                                                                                                                      Hi Sir, My question is very simple Why “wait” method is there in object class bcz of we are mostly using in wait method in thread class and is there any reason apart from thread u can also use "wait"method in other place then please write the few code without using the thread concept

                                                                                                                      - pratap singh

                                                                                                                        JournalDev
                                                                                                                        DigitalOcean Employee
                                                                                                                        DigitalOcean Employee badge
                                                                                                                        November 14, 2019

                                                                                                                        Example public class Data { int msg; boolean valueSet=false; public synchronized void get() { try {Thread.sleep(3000);}catch(Exception e) {} while(!valueSet) { try {wait();}catch(Exception e) {} } System.out.println(“Consume :”+msg); valueSet=false; notify(); } public synchronized void set(int msg) { try {Thread.sleep(3000);}catch(Exception e) {} while(valueSet) { try {wait();}catch(Exception e) {} } this.msg=msg; System.out.println(“Produce :”+msg); valueSet=true; notify(); } } -------------------------------------------------------------------------------- public class Producer implements Runnable{ Data d; Producer(Data d){ this.d=d; new Thread(this,“Producer”).start(); } public void run() { int i=1; while(true) { d.set(i++); } } } ------------------------------------------------------------------------ public class Consumer implements Runnable { Data d; boolean ValueSet=false; Consumer(Data d){ this.d=d; new Thread(this,“Consumer”).start(); } public void run() { while(true) { d.get(); } } } ------------------------------------------------------------- public class InterThread { public static void main(String[] args) { // TODO Auto-generated method stub Data d=new Data(); new Producer(d); new Consumer(d); } }

                                                                                                                        - sagar

                                                                                                                          JournalDev
                                                                                                                          DigitalOcean Employee
                                                                                                                          DigitalOcean Employee badge
                                                                                                                          March 12, 2020

                                                                                                                          Hello Sir, Your content and the way of explaining the things is awesome. I like everything of this tutorial except that why there are this much ads in this website? Like it’s very annoying. Also it slow down the speed.

                                                                                                                          - Sanjana Chourishi

                                                                                                                          JournalDev
                                                                                                                          DigitalOcean Employee
                                                                                                                          DigitalOcean Employee badge
                                                                                                                          March 13, 2020

                                                                                                                          It’s my only source of earning and maintaining the website. And there are only 5 total ads - 4 sidebar ads and 1 video ad. That’s not a lot.

                                                                                                                          - Pankaj

                                                                                                                          JournalDev
                                                                                                                          DigitalOcean Employee
                                                                                                                          DigitalOcean Employee badge
                                                                                                                          May 15, 2020

                                                                                                                          Sir if possible could you please guide about Git from biggner to advance level and how we can use git for showing our work.

                                                                                                                          - Prabhat

                                                                                                                            JournalDev
                                                                                                                            DigitalOcean Employee
                                                                                                                            DigitalOcean Employee badge
                                                                                                                            May 17, 2020

                                                                                                                            Journal Dev has been always the best portfolio for me to learn and brush up concepts with hands on example in a simpler and easy way.Thank You So so much.

                                                                                                                            - Sachin Pradhan

                                                                                                                              JournalDev
                                                                                                                              DigitalOcean Employee
                                                                                                                              DigitalOcean Employee badge
                                                                                                                              July 3, 2020

                                                                                                                              Hi, Does any one know why if you include a println statement in the run method of the waiter class before the synchronized block like in the notifier class the thread keeps blocked?, for example: public void run() { String name = Thread.currentThread().getName(); System.out.println(“Test”); //------------------------------------> This one keeps the thread blocked. synchronized (msg) { try{ System.out.println(name+" waiting to get notified at time:"+System.currentTimeMillis()); msg.wait(); }catch(InterruptedException e){ e.printStackTrace(); } Thanks!!!

                                                                                                                              - Armando

                                                                                                                                JournalDev
                                                                                                                                DigitalOcean Employee
                                                                                                                                DigitalOcean Employee badge
                                                                                                                                August 4, 2021

                                                                                                                                Hi - it might be late query. I have tried test class as below and it is not notifying even single waiter thread. If i copy samea above client test code ,it is working. Please help somebody why it is not able to notify new Thread(new Waiter(new Message(“Process It”)),“WaiterThread1”).start(); new Thread(new Waiter(new Message(“Process It”)),“WaiterThread2”).start(); new Thread(new Notifier(new Message(“Process It”)),“NotifierThread”).start(); System.out.println(“ALL THREADS ARE STARTED”);

                                                                                                                                - Lakshman

                                                                                                                                JournalDev
                                                                                                                                DigitalOcean Employee
                                                                                                                                DigitalOcean Employee badge
                                                                                                                                December 23, 2021

                                                                                                                                Hello there, wait and notify method must be called on the same instance of shared object (which is Massage). if you are creating different objects of Massage bean then wait and notify methods will be called on different Massage objects. wait and notify should call on the same reference of source object

                                                                                                                                - Ajay Raut

                                                                                                                                  Try DigitalOcean for free

                                                                                                                                  Click below to sign up and get $200 of credit to try our products over 60 days!

                                                                                                                                  Sign up

                                                                                                                                  Join the Tech Talk
                                                                                                                                  Success! Thank you! Please check your email for further details.

                                                                                                                                  Please complete your information!

                                                                                                                                  Become a contributor for community

                                                                                                                                  Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

                                                                                                                                  DigitalOcean Documentation

                                                                                                                                  Full documentation for every DigitalOcean product.

                                                                                                                                  Resources for startups and SMBs

                                                                                                                                  The Wave has everything you need to know about building a business, from raising funding to marketing your product.

                                                                                                                                  Get our newsletter

                                                                                                                                  Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

                                                                                                                                  New accounts only. By submitting your email you agree to our Privacy Policy

                                                                                                                                  The developer cloud

                                                                                                                                  Scale up as you grow — whether you're running one virtual machine or ten thousand.

                                                                                                                                  Get started for free

                                                                                                                                  Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

                                                                                                                                  *This promotional offer applies to new accounts only.