
java并发学习19:生产者、消费者模式
发布日期:2021-05-07 02:04:30
浏览次数:19
分类:精选文章
本文共 1543 字,大约阅读时间需要 5 分钟。
1、定义
- 与前面的保护性暂停中的GuardObject 不同,不需要产生结果和消费结果的线程一一对应
- 消费队列可以用来平衡生产和消费的线程资源
- 生产者仅负责产生结果数据,不关心数据该如何处理,而消费者专心处理结果数据
- 消息队列是有容量限制的,满时不会再加入数据,空时不会再消耗数据
- JDK中各种阻塞队列,采用的就是这种模式
2、实现
class Message { private int id; private Object value; public Message(int id,Object value) { this.id = id; this.value = value; } public int getId() { return id; } public Object getValue() { return value; }}
//消息队列类,Java线程之间通信class MessageQueue { //消息的队列集合 privae LinkedListlist = new LinkedList<>(); //队列容量 private int capcity; public MessageQueue(int capcity) { this.capcity = capcity; } //获取消息 public Message take() { //检查队列是否为空 synchronized(list) { while(list.isEmpty()) { try { list.wait(); } catch (InterruptedExcption e) { e.printStackTrace(); } } //从队列头部获取消息并返回 Message message = list.removeFirst(); list.notifyAll(); return message; } } //存入消息 public void put(Message message) { synchronized (list) { //检查对象是否已满 while(list.size() == capcity) { try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //将消息加入队列尾部 list.addLast(message); list.notifyAll(); } }}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月07日 11时25分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
函数指针的典型应用-计算函数的定积分(矩形法思想)
2021-05-08
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2021-05-08
用 wxPython 打印你的 App
2021-05-08
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2021-05-08
Linux下安装MySql过程
2021-05-08
android:使用audiotrack 类播放wav文件
2021-05-08
vue通过better-scroll 封装自定义的下拉刷新组件
2021-05-08
android解决:使用多线程和Handler同步更新UI
2021-05-08
Element UI 中动态路由的分析及实现
2021-05-08
使用springMVC配置视图管理器后找不到指定的页面
2021-05-08
杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)
2021-05-08
十大排序算法之三:插入排序(Python)
2021-05-08
利用递归实现二叉树的前中后序遍历(Python)
2021-05-08
python负数存储
2021-05-08
合并两个有序数组
2021-05-08
聊聊我的五一小假期
2021-05-08
Vue新建项目——页面初始化
2021-05-08
Node.js包使用系列(一)——修改NPM全局下载和缓存路径
2021-05-08
6.14编一个程序,将两个字符串s1和s2比较,不要用strcmp函数。
2021-05-08