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

生产者、消费者模式是日常生活中随处可见的场景。用它来解决现实生活中的业务场景很有用,自己总结一下自己理解到的。


我现在知道的有两种:

第一种:最最普通的 
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/

猜你喜欢

转载自ican.iteye.com/blog/2250794