//-*-c-*- Main { public static void main(String args[]) (@ Printer printer = new Printer(); new Thread(new PrintSender(printer, 1)).start(); // Thread-x; new Thread(new PrintSender(printer, 2)).start(); // Thread-y; new Thread(new PrintSender(printer, 1)).start(); // Thread-z; @) } PrintSender { (@ private Printer _printer; private int _func; PrintSender(Printer printer, int func) { _printer=printer; _func=func; } @) public void run() (@ switch(_func) { case 1: _printer.print1(); break; case 2: _printer.print2(); break; } @) } Printer { public void print1() (@ for(int i=0;i<4;i++) { System.out.println(Thread.currentThread()+" executing print1()"); long time=System.currentTimeMillis(); while(System.currentTimeMillis() < time) {} Thread.yield(); } @) public void print2() (@ for(int i=0;i<4;i++) { System.out.println(Thread.currentThread()+" executing print2()"); long time=System.currentTimeMillis(); while(System.currentTimeMillis() < time+300) {} Thread.yield(); } @) }