class Thread2 extends Thread { mailbox box; Thread2(mailbox box) { this.box = box; } public void run() { synchronized(this){ for(int i = 0; i<5;i++) box.assign(Thread.currentThread().getName()); this.notifyAll(); try{ this.wait(); Thread.currentThread().sleep((long)(Math.random()*100000000)); }catch (InterruptedException e){ System.exit(1); } } } } class ThreadClear extends Thread{ mailbox box; ThreadClear(mailbox box){ this.box = box; } public void run(){ synchronized(this){ while(true){ System.out.println(box.erase()); this.notifyAll(); try{ this.wait(); Thread.currentThread().sleep((long)(Math.random()*100000000)); }catch (InterruptedException e){ System.exit(1); } } } } } class mailbox { String message; mailbox(String message){ this.message = message; } public void assign(String s){ this.message = s; } public String erase(){ String s = message; message =""; return s; } } public class Coordination { public static void main(String args[]) { mailbox box = new mailbox(""); ThreadClear clear = new ThreadClear(box); clear.start(); for(int i = 0; i<1;i++){ Thread2 firstThread = new Thread2(box); firstThread.start(); } } }