Java多线程:生产者 - 消费者关系与死锁问题解析
1. 生产者 - 消费者关系
在多线程编程中,常常会出现两个或多个运行线程共享资源,并且相互依赖以更新这些资源的情况。生产者 - 消费者关系就是这种情况的典型代表,其中生产者线程生产资源,而消费者线程消费这些资源。
虽然同步每个线程对资源的访问可以防止竞态条件,但仍需要一种机制让线程之间彼此通信。从消费者的角度来看,如果消费者需要消费生产者尚未生产的资源,那么消费者必须等待,直到收到资源已生产的通知。从生产者的角度来看,如果存储容量有限,且由于没有更多空间而暂时停止生产,那么当消费者消耗了一些存储空间时,生产者需要得到通知。
1.1 示例分析
在之前的 PiPanel1 例子中,生产者线程不断生成数字,并在每次生成新数字时调用 handleDigit() 方法。该方法通过调用 displayDigit() 将数字显示在 JTextArea 中。但这并不是真正的生产者 - 消费者关系,因为 displayDigit() 调用是由生产者线程自身发起的,即生产者自己消费了所生产的数字,在逻辑上,只有前一个数字被消费后,才会生产下一个数字。
而在 PiPanelProdCons 例子中,我们将消费者功能分离到一个单独的线程中,从而创建了真正的生产者 - 消费者关系。首先来看 DefaultDigitHolder.java ,它实现了 DigitHolder
超级会员免费看
订阅专栏 解锁全文


被折叠的 条评论
为什么被折叠?



