wait/notifyキューからBlockingQueueへ
手書きのプロデューサー・コンシューマー調整をBlockingQueueに置き換える。
コード比較
✕ Manual wait and notify
synchronized (queue) {
while (queue.isEmpty()) {
queue.wait();
}
Job job = queue.removeFirst();
process(job);
}
✓ BlockingQueue
BlockingQueue<Job> queue = new LinkedBlockingQueue<>(); Job job = queue.take(); process(job);
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
より安全な調整
キューがロックと条件通知を管理します。
明確な意図
put()とtake()はプロデューサー・コンシューマーの動作を直接表現します。
組み込みポリシー
容量制限、公平性、タイムアウト、非ブロッキング操作を選択できます。
旧来のアプローチ
手動でのwaitとnotify
モダンなアプローチ
BlockingQueue
JDKバージョン
5
難易度
中級
JDKサポート
wait/notifyキューからBlockingQueueへ
利用可能
JDK 5(2004年)以降、広く利用可能
仕組み
正しいwait/notifyコードには、共有モニター、条件ループ、対応する通知、そして慎重な割り込み処理が必要です。BlockingQueueはこれらのルールをカプセル化し、プロデューサー・コンシューマーのワークフロー向けにブロッキング、タイムアウト付き、非ブロッキングの各操作を提供します。put()やtake()などの呼び出しは引き続き割り込み可能です。
関連ドキュメント
証明