关于生产者消费者的双Condition问题。

来源:10-7 用条件对象实现生产者模式

慕函数0594413

2020-06-02

老师你好,关于这个案例,我还是有点疑问。之前也有同学问过相同的,给出的答案是双Condition能够避免生产者线程唤醒生产者线程。
但是我觉得会出现这样的情况,是因为生产者线程使用的是condition.signal(),一次只唤醒一个线程。但是如果我用的是condition.signalAll(),即便是单Condition,也不会出现生产者线程唤醒生产者线程的情况,至少把消费者一起唤醒了。
同理,如果使用synchronized(lock) 和wait/notifyAll,这种情况也类似单Condition。
所以我觉得是不是 单Condition + signalAll() ,效果是和 双Condition + signal 效果是等价的?

写回答

1回答

悟空

2020-06-02

单Condition + signalAll() 是可以达到同样效果的,不过双Condition效率更高,可以避免唤醒不必要的线程。

1
1
慕函数0594413
嗯嗯,好的。明白啦
2020-06-03
共1条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程