Concurrency 中级

将 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
难度
中级
将 wait/notify 队列改为 BlockingQueue
可用

自 JDK 5 起广泛可用(2004 年)

正确的 wait/notify 代码需要共享监视器、条件循环、匹配的通知以及对中断的仔细处理。BlockingQueue 封装了这些规则,为生产者-消费者场景提供阻塞、限时和非阻塞操作。put() 和 take() 等调用仍然可被中断。