Java tutorial
public class FlagComm { public static void main(String args[]) { FlagSend s = new FlagSend(); FlagRec r = new FlagRec(s); Thread st = new Thread(s); Thread rt = new Thread(r); rt.setDaemon(true); st.start(); rt.start(); try { while (s.isValid) { Thread.sleep(100); } } catch (InterruptedException e) { e.printStackTrace(); } } } class FlagSend implements Runnable { volatile int theValue; volatile boolean isValid; public void run() { for (int i = 0; i < 5; i++) { while (isValid) { Thread.yield(); } theValue = (int) (Math.random() * 256); System.out.println("sending " + theValue); isValid = true; } } } class FlagRec implements Runnable { FlagSend theSender; public FlagRec(FlagSend sender) { theSender = sender; } public void run() { while (true) { while (!theSender.isValid) { Thread.yield(); } System.out.println("received " + theSender.theValue); theSender.isValid = false; } } }