知识卡片

生产消费靠条件

普通读书笔记卡 · 1511

内容

生产者-消费者模式的核心不是队列本身,而是用容量条件把生产/消费速度解耦:缓冲区满时生产者等待、空时消费者等待。[[等待条件必须循环复查]] 描述的 while+wait/notify 是标准写法——用独立的 NOT_FULL/NOT_EMPTY 两个条件对象分别管理两类等待,避免互相唤醒错对象。条件变化后精确通知对方,系统就能在吞吐和内存间维持边界,而非空轮询耗 CPU。

参考来源

- 位置:《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》第2章《Java内置锁的核心原理》2.3.1节《生产者-消费者模式》、2.9.5节《生产者-消费者之间的线程间通信》(源文件:_epub-src/OEBPS/Text/chapter66.xhtml、chapter94.xhtml) - 结论依据:原文先给出生产者-消费者模式的关键点——“数据缓冲区是有容量上限的。数据缓冲区满后,生产者不能再加入数据;数据缓冲区空时,消费者不能再取出数据”“线程在空闲时需要尽可能阻塞而不是执行无效的空操作”;再给出用 NOT_FULL/NOT_EMPTY 两个条件对象配合 wait/notify 实现的具体版本,因此推出本卡结论。 - 原始内容:数据缓冲区是有容量上限的。数据缓冲区满后,生产者不能再加入数据;数据缓冲区空时,消费者不能再取出数据……NOT_FULL:用于数据缓冲区的未满条件等待和通知……NOT_EMPTY:用于数据缓冲区的非空条件等待和通知。