Object: notifyAll()
/* * Output: Calling wait Calling notifyAll Done Done */ class SyncFlag { boolean flag; synchronized void k1() { if(flag == false) { flag = true; try { System.out.println("Calling wait"); wait(); } catch(Exception e) { e.printStackTrace(); } } else { flag = false; System.out.println("Calling notifyAll"); notifyAll(); } } } class MyThread extends Thread { SyncFlag flag; MyThread(SyncFlag k) { this.flag = k; } public void run() { flag.k1(); System.out.println("Done"); } } public class MainClass { public static void main(String args[]) { SyncFlag k = new SyncFlag(); new MyThread(k).start(); new MyThread(k).start(); } }