Java言語で学ぶデザインパターン入門 マルチスレッド編 第5章 Producer-Consumer

一方でどんどんデータを生成し登録していき、他方でどんどんデータを取り出して利用するパターン。イベントディスパッチャなんかでよく使うね。

public class Channel {
    private List queue = new LinkedList();

    public synchronized void put(Data data) {
        while (MAX_SIZE <= queue.size()) {
            wait();
        }

        queue.addLast(data);
        notifyAll();
    }

    public synchronized Data take() {
        while (queue.size() <= 0) {
            wait();
        }

        Data data = queue.removeFirst();
        notifyAll();

        return data;
    }
}