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 LinkedList
list = 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(); } }}
上一篇:java并发学习20:park与unpark
下一篇:java并发学习18:保护性暂停模式

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月07日 11时25分01秒