欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一次搞定 生产者/消费者模式

程序员文章站 2022-04-23 08:37:03
...
生产者、消费者模式是日常生活中随处可见的场景。用它来解决现实生活中的业务场景很有用,自己总结一下自己理解到的。


我现在知道的有两种:

第一种:最最普通的 
1、设计两个线程 一个生产者、一个消费者同时启动去操作共享的 容器
2、先在容器上加个锁,判断容器是否符合自己的使用规则,不符合规则,自己等待。(在这里生产者、和消费者肯定有一个是符合规则的。)符合规则, 操作完容器。通知等待的另一方。自己等待。等待被唤醒。
3、上面进行判断以后不符合规则的线程,被唤醒去继续判断是否符合自己的使用规则,此时肯定符合规则。开始进行操作 容器--> 唤醒另一个线程。
4、此时第2步等待的线程被唤醒,继续运行。两个线程依次交替执行。

一次搞定 生产者/消费者模式
            
    
    博客分类: 设计模式 设计模式生产者消费者模式 

一次搞定 生产者/消费者模式
            
    
    博客分类: 设计模式 设计模式生产者消费者模式 

第二种:使用Java中的阻塞队列,这种方法最简单因为阻塞队列自己实现了。
生产者只管往里放,如果容器满了,自己阻塞然后会一直判断此容器是否被消费。
消费者一直往出取,如果容器空了,自己阻塞然后会一直判断此容器是可以被消费的东西。

阻塞队列 有两种
BlockingQueue   接口
    LinkedBlockingQueue  类
    ArrayBlockingQueue   类
使用take() \put() 方法可以阻塞

一次搞定 生产者/消费者模式
            
    
    博客分类: 设计模式 设计模式生产者消费者模式 



参考资料:
http://developer.51cto.com/art/201104/256805.htm
http://www.cnblogs.com/happyPawpaw/archive/2013/01/18/2865957.html
http://www.infoq.com/cn/articles/producers-and-consumers-mode/
  • 一次搞定 生产者/消费者模式
            
    
    博客分类: 设计模式 设计模式生产者消费者模式 
  • 大小: 57.2 KB
  • 一次搞定 生产者/消费者模式
            
    
    博客分类: 设计模式 设计模式生产者消费者模式 
  • 大小: 50.3 KB
  • 一次搞定 生产者/消费者模式
            
    
    博客分类: 设计模式 设计模式生产者消费者模式 
  • 大小: 38.9 KB