This example shows how to use notify() and wait() methods of Thread class.
Get the sources of the example from the following GitHub url : https://github.com/javaspringexamples/ThreadNotifyWait.git
Or Download a .zip file : https://github.com/javaspringexamples/ThreadNotifyWait/archive/master.zip
Thread-1 is waiting... Thread-0: Says the field soccer is no more available.P1 please gets in my player and have fun. Thread-3 is waiting... P1 shoots ball 1 Thread-2 is waiting... P1 shoots ball 2 P1 shoots ball 3 P1 shoots ball 4 P1 shoots ball 5 P1 shoots ball 6 P1 shoots ball 7 P1 shoots ball 8 P1 shoots ball 9 P1 shoots ball 10 Thread-0: Says the field soccer is available. Dear threads get notified...! Thread-1 is notified... Thread-1: Says the field soccer is no more available.P2 please gets in my player and have fun. P2 shoots ball 1 P2 shoots ball 2 P2 shoots ball 3 P2 shoots ball 4 P2 shoots ball 5 P2 shoots ball 6 P2 shoots ball 7 P2 shoots ball 8 P2 shoots ball 9 P2 shoots ball 10 Thread-1: Says the field soccer is available. Dear threads get notified...! Thread-3 is notified... Thread-3: Says the field soccer is no more available.P4 please gets in my player and have fun. P4 shoots ball 1 P4 shoots ball 2 P4 shoots ball 3 P4 shoots ball 4 P4 shoots ball 5 P4 shoots ball 6 P4 shoots ball 7 P4 shoots ball 8 P4 shoots ball 9 P4 shoots ball 10 Thread-3: Says the field soccer is available. Dear threads get notified...! Thread-2 is notified... Thread-2: Says the field soccer is no more available.P3 please gets in my player and have fun. P3 shoots ball 1 P3 shoots ball 2 P3 shoots ball 3 P3 shoots ball 4 P3 shoots ball 5 P3 shoots ball 6 P3 shoots ball 7 P3 shoots ball 8 P3 shoots ball 9 P3 shoots ball 10 Thread-2: Says the field soccer is available. Dear threads get notified...! All balls shooted.
package javaspringexamples.ThreadExamples; /** * This example shows how to use notify() and wait() methods of Thread class. * * @author mounir.sahrani@gmail.com * */ public class Player extends Thread { private String name; private SoccerField sf; public Player(String _name, SoccerField _sf) { name = _name; sf = _sf; } /** * If the soccer field is available, then the player gets in to shoot balls. */ public void shootBalls() { sf.setAvailable(false); System.out.println(getName() + ": Says the field soccer is no more available." + name + " please gets in my player and have fun."); for (int i = 1; i <= 10; i++) System.out.println(name + " shoots ball " + i); System.out.println(getName() + ": Says the field soccer is available."); sf.setAvailable(true); } @Override public void run() { sf.getSoccerField(); shootBalls(); } /** * The main method. */ public static void main(String[] args) throws InterruptedException { SoccerField sf = new SoccerField(); Player p1 = new Player("P1", sf); Player p2 = new Player("P2", sf); Player p3 = new Player("P3", sf); Player p4 = new Player("P4", sf); p1.start(); p2.start(); p3.start(); p4.start(); // Waiting for threads terminating their jobs. p1.join(); p2.join(); p3.join(); p4.join(); System.out.println("All balls shooted."); } }
package javaspringexamples.ThreadExamples; /** * This example shows how to use notify() and wait() methods of Thread class. * * @author mounir.sahrani@gmail.com * */ public class SoccerField { private boolean available = true; /** * If the soccer field is not available, then the thread will wait until * being notified that the soccer field is available again. */ public synchronized void getSoccerField() { if (!available) { try { System.out.println(Thread.currentThread().getName() + " is waiting..."); wait(); System.out.println(Thread.currentThread().getName() + " is notified..."); } catch (InterruptedException e) { // Do something to handle the InterruptedException e.printStackTrace(); } } } /** * When the soccer field is available, the other threads are notified to * continue doing their jobs. * */ public synchronized void setAvailable(boolean a) { available = a; if (a) { notify(); System.out.println("Dear threads get notified...!"); } } public boolean isAvailable() { return available; } }