简介
最近在学习操作系统这门课程,在学习的过程中遇到了生产者与消费者模式这个知识。同样的,在以前学习Java多线程编程时也遇到过相同的知识点。这让我
不得不对这个知识点深入的理一理。
什么是消费者与生产者模式?在操作系统这门课中,这是一个描述进程之间的问题。系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品
放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。生产者与消费者共享一个初始为空,大小为n的缓冲区。而且两个进程要满足:只有缓冲区没满时,
生产者才能把产品放入缓冲区,否则阻塞等待;同样只有缓冲区不为空时,消费者才能从中取出产品,否则阻塞等待。
综上所述,我们必须使这两个进程满足:1.互斥地访问缓冲区;2.两个进程之间保证两个同步关系:缓冲区满时,需要消费者消费后生产者才能生产;缓冲区为
空时,生产者生产后,消费者才能消费。理清了进程之间的关系后,即可利用信号量进制进行实现。
而在多线程中的消费者与生产者问题仅仅是将进程换做了线程,实现方式也由操作系统中的原语实现方式该为了Java代码方式实现。
代码实现:
1.synchronized、wait和notify方式实现(管程)
1 | public class ProducerConsumerWithWaitNotify { |
2.阻塞队列BlockingQueue实现方式
1 | import java.util.concurrent.BlockingQueue; |
参考链接
《王道操作系统考研》
https://www.cnblogs.com/fankongkong/p/7339848.html