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; } }