Concurrency 中級

手書きのプロデューサー・コンシューマー調整を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
難易度
中級
wait/notifyキューからBlockingQueueへ
利用可能

JDK 5(2004年)以降、広く利用可能

正しいwait/notifyコードには、共有モニター、条件ループ、対応する通知、そして慎重な割り込み処理が必要です。BlockingQueueはこれらのルールをカプセル化し、プロデューサー・コンシューマーのワークフロー向けにブロッキング、タイムアウト付き、非ブロッキングの各操作を提供します。put()やtake()などの呼び出しは引き続き割り込み可能です。