this alows one thread to jumpstart a thread that was put to sleep(wait)

dragon zord :

Code:

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;
 }

}


mastadon zord :

Code:

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());
 }
 }

}


saber tooth tiger zord :

Code:


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();
}

}

}


triseratops zord (main):

Code:

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");



output :

waiter waiting to get notified at time:1553027902471
All the threads are started
waiter1 waiting to get notified at time:1553027902471
notifier started

pause...

waiter waiter thread got notified at time:1553027903472
waiter processed: notifier Notifier work done

*********************************************************************
key notes :

notify wakes up one random thread

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

notify all wakes all threads waiting on the object, use this on other cases than D above

:joker: