生产者、消费者模式是日常生活中随处可见的场景。用它来解决现实生活中的业务场景很有用,自己总结一下自己理解到的。
我现在知道的有两种:
第一种:最最普通的
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
分享到:
相关推荐
Easy搞定设计模式.pdf
AutoCAD *.dxf文件解析,使用dxflib搞定polyline/spline/ellipse等复杂图形。实现了以下元素的解析和绘制: 元素:point、line、circle、arc、polyline、spline、ellipse、text 其他:layer、block 绘制图形,使用了...
自己整理的简单,清晰,易于理解学习设计模式文档。如果你是新手。看完这三十多页的PPT,相信你可以轻松搞定常用的设计模式。
最新的Git与Github巨作课程,课程内容主旨分成了Git&Github极速入门与攻坚实战课程两部分,可以理解为一个是课程的详细教学篇,和一个精华缩减的集合。Git与Github教程详细介绍了Git的...一次性搞定Git与Github的学习。
考研英语作文万能模板一次搞定.doc
举例:一周搞定51单片机视频教程 链接: https://pan.baidu.com/s/1c2cGGCg 密码: a9ng 一周搞定系列之模电数电全集 源享科技STM32高清视频教程 一周搞定系列之模电。cohf
运算放大器是直流耦合高增益电子电压放大设备,通常具有差动输入和单端输出。一些理想的运算放大器配置通常假设回馈电阻具有完美的匹配特性,但实际上电阻的非理想因素会影响各种电路参数,例如共模抑制比、谐波失真...
这个压缩包文件名为"2bc47797f34544d099d57cd8e786f3d9",很可能包含了关于STM32F103的多种外围电路设计实例和资料,方便开发者一次性获取所有必要的资源。 STM32F103系列拥有丰富的外设接口,包括但不限于: 1. **...
而《一周搞定系列之51单片机_视频学习配套资料》的出现,无疑是为这些入门者提供了一条快速学习和掌握的捷径。 51单片机之所以能够成为初学者的好伙伴,一方面是因为它的学习曲线相对平缓,适合没有太多电子或...
然后,《传智播客轻松搞定设计模式》是软件工程领域的一本重要教材。设计模式是解决常见软件设计问题的经验总结,是优秀程序员必备的知识。书中将介绍一些经典的设计模式,如单例模式、工厂模式、观察者模式等,这些...
本文将详细讲解如何解决"jsp mysql 中文输入一次搞定"的问题。 首先,我们需要理解中文乱码产生的原因。这通常是因为字符集不一致导致的,即前端展示、HTTP传输、服务器接收、数据库存储等多个环节中,如果没有统一...
在标题和描述中提到的"一次搞定"可能是指使用特定的工具,如压缩包中的"IP修改工具V1.4.exe"。这是一个可能的第三方软件,旨在简化上述设置过程,一次性完成所有配置。用户只需运行该工具,按照向导提示输入所需信息...
一分钟一幅图搞定TCP/IP 应用层、表示层、会话层:HTTP、FTP、SMTP、POP3,加解密,压缩解压缩,会话管理 传输层:TCP、UDP,数据段有效到达 网络层:IP、ICMP、RIP,分组传输,路由选择 数据链路层:ARP、PPTP、L2...
【一周搞定系列C语言_视频配套学习资料.zip】是一个针对初学者设计的C语言学习资源包,虽然视频教程缺失,但包含了大量的C语言程序实例,是深入理解和掌握C语言编程的良好辅助材料。这个压缩包主要涵盖了C语言的基础...
在电子硬件设计中,PCB(印制电路板)布局是一项至关重要的工作,尤其是在高频开关电源设计中。...通过实例分析和使用设计工具,初学者可以在实践中掌握这些关键技巧,从而在第一次设计时就能实现理想的PCB布局。
Python使用OpenCV进行视频/图像背景去除,一个Python文件搞定,附测试视频! Python使用OpenCV进行视频/图像背景去除,一个Python文件搞定,附测试视频! Python使用OpenCV进行视频/图像背景去除,一个Python文件...