WaitComm.java Source code

Java tutorial

Introduction

Here is the source code for WaitComm.java

Source

public class WaitComm {
    public static void main(String args[]) {
        WFlagSend s = new WFlagSend();
        WFlagRec r = new WFlagRec(s);
        Thread st = new Thread(s);
        Thread rt = new Thread(r);
        rt.setDaemon(true);
        st.start();
        rt.start();
        try {
            st.join();
            while (s.isValid) {
                Thread.sleep(100);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class WFlagSend implements Runnable {
    volatile int theValue;

    boolean isValid;

    public void run() {
        for (int i = 0; i < 5; i++) {
            synchronized (this) {
                while (isValid) {
                    try {
                        this.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            theValue = (int) (Math.random() * 256);
            System.out.println("sending " + theValue);
            synchronized (this) {
                isValid = true;
                this.notify();
            }
        }
    }
}

class WFlagRec implements Runnable {
    WFlagSend theSender;

    public WFlagRec(WFlagSend sender) {
        theSender = sender;
    }

    public void run() {
        while (true) {
            synchronized (theSender) {
                while (!theSender.isValid) {
                    try {
                        theSender.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            System.out.println("received " + theSender.theValue);
            synchronized (theSender) {
                theSender.isValid = false;
                theSender.notify();
            }
        }
    }
}