Java Thread: wait, notify and notifyAll Example - BunksAllowed

BunksAllowed is an effort to facilitate Self Learning process through the provision of quality tutorials.

Community

Java Thread: wait, notify and notifyAll Example

Share This


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


public class Waiter implements Runnable { private Message msg; public Waiter(Message m) { this.msg = m; } 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 + " got notified at time:" + System.currentTimeMillis()); System.out.println(name + " processed: " + msg.getMsg()); } } }


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


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




Happy Exploring!

No comments:

Post a Comment