//@author: j.n.magee 11/11/96 package concurrency.message; import java.awt.*; import java.applet.*; import concurrency.display.*; public class SynchMsgDemo extends Applet { ThreadPanel tx; ThreadPanel rx; SlotCanvas senddisp; SlotCanvas recvdisp; public void init() { add(tx =new ThreadPanel("Sender",Color.blue,false)); add(senddisp = new SlotCanvas("e",Color.cyan,1)); add(recvdisp = new SlotCanvas("v",Color.cyan,1)); add(rx =new ThreadPanel("Receiver",Color.blue,false)); } public void start() { Channel chan = new Channel(); tx.start(new Sender(chan,senddisp)); rx.start(new Receiver(chan,recvdisp)); } public void stop() { tx.stop(); rx.stop(); } } /*******************SENDER************************/ class Sender implements Runnable { private Channel chan; private SlotCanvas display; Sender(Channel c, SlotCanvas d) {chan=c; display =d;} public void run() { try { int ei = 0; while(true) { display.enter(String.valueOf(ei)); ThreadPanel.rotate(12); chan.send(new Integer(ei)); display.leave(String.valueOf(ei)); ei=(ei+1)%10; ThreadPanel.rotate(348); } } catch (InterruptedException e){} } } /*******************RECEIVER************************/ class Receiver implements Runnable { private Channel chan; private SlotCanvas display; Receiver(Channel c, SlotCanvas d) {chan=c; display =d;} public void run() { try { Integer v=null; while(true) { ThreadPanel.rotate(180); if (v!=null) display.leave(v.toString()); v = (Integer)chan.receive(); display.enter(v.toString()); ThreadPanel.rotate(180); } } catch (InterruptedException e){} } }