java 消费者 生产者 队列_用Java写一个生产者-消费者队列
packageyunche.test.producer;importjava.util.LinkedList;importjava.util.Random;/*** @ClassName: Producer
* @Description: 生产者
*@author: yunche
* @date: 2018/08/26*/
public class Producer implementsRunnable
{private final LinkedListlist;/*** 缓冲区大小*/
private final intmaxSize;public Producer(LinkedList list, intsize)
{this.list =list;
maxSize=size;
}
@Overridepublic voidrun()
{try{while(true)
{//模拟耗时1s
Thread.sleep(1000);synchronized(list)
{if(list.size()==maxSize)
{
System.out.println("缓冲区已满,正在等待消费者消费..." +System.currentTimeMillis());
list.wait();
}else{
list.add(produce());
list.notifyAll();
}
}
}
}catch(InterruptedException e)
{
e.printStackTrace();
}
}private intproduce()
{int n = new Random().nextInt(10000);
System.out.println("Thread: " + Thread.currentThread().getName() + " produce: " +n);returnn;
}
}packageyunche.test.producer;importjava.util.Date;importjava.util.LinkedList;/*** @ClassName: Consumer
* @Description: 消费者
*@author: yunche
* @date: 2018/08/26*/
public class Consumer implementsRunnable
{private final LinkedListlist;publicConsumer(LinkedList list)
{this.list =list;
}
@Overridepublic voidrun()
{while (true)
{try{synchronized(list)
{//模拟耗时
Thread.sleep(1000);if(list.isEmpty())
{
System.out.println("缓冲区已空,正在等待生产者生产..." + System.currentTimeMillis() +Thread.currentThread().getName());
list.wait();
}else{
consume(list.poll());
list.notifyAll();
}
}
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}private voidconsume(Integer n)
{
System.out.println("Thread:" + Thread.currentThread().getName() + " consume: " +n);
}
}packageyunche.test.producer;importjava.util.ArrayList;importjava.util.LinkedList;importjava.util.List;/*** @ClassName: Main
* @Description: 测试类
*@author: yunche
* @date: 2018/08/26*/
public classMain
{public static voidmain(String[] args)
{
LinkedList list = new LinkedList<>();
Producer p= new Producer(list, 10);
Consumer c1= newConsumer(list);
Consumer c2= newConsumer(list);
Thread producer= newThread(p);
producer.setName("生产者线程");
Thread consumer1= newThread(c1);
consumer1.setName("消费者1");
Thread consumer2= newThread(c2);
consumer2.setName("消费者2");
producer.start();
consumer1.start();
consumer2.start();
}
}
java 消费者 生产者 队列_用Java写一个生产者-消费者队列相关推荐
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- javaweb 常用jar包_使用javaweb写一个登录案例
下载地址:https://gitee.com/dl_shrimp/java_web_login_case.git https://www.zhihu.com/video/124178088859969 ...
- java 链表 最小堆优先级队列_关于Java集合的小抄
List ArrayList 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值.默认第一次插入元 ...
- java 头尾 队列_探索JAVA并发 - 并发容器全家福
14个并发容器,你用过几个? 不考虑多线程并发的情况下,容器类一般使用ArrayList.HashMap等线程不安全的类,效率更高.在并发场景下,常会用到ConcurrentHashMap.Array ...
- java 结合redis队列_在 Java 中使用 redis 的消息队列服务
前言 关于 redis 我们前面已经讨论过了缓存.分布式锁.分布式唯一标识.LBS服务的用法,这里我们来谈谈利用 redis 来实现一个消息服务. 典型的消息服务是一个生产者和消费者模式的服务.一般是 ...
- java redis延迟队列_基于redis实现的延迟消息队列
delay-queue redis实现延迟消息队列 需求背景 最近在做一个排队取号的系统 在用户预约时间到达前XX分钟发短信通知 在用户预约时间结束时要判断用户是否去取号了,不然就记录为爽约 在用户取 ...
- 用java做一个简单记事本_用记事本写一个简单的java程序
用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...
- cmd写java程序_用cmd写一个最简单的Java程序
一,准备: 1.确保电脑中装有eclipse软件并且确保配置好环境变量 (1)环境变量配置方法: 特别提示:jdk和eclipse保存的路径不能有中文字符 1.打开我的电脑--属性--高级--环境变量 ...
- java文件客户端下载_使用Java写一个minio的客户端上传下载文件
标签:color ati tty java system wired format media param 前言: 确保已经安装了minio的服务端 代码: pom.x ...
最新文章
- Jupyter中出现ModuleNotFoundError: No module named ‘matplotlib‘的解决办法
- vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决
- python pandas读写excel_python pandas读写excel
- [JS-BOM]BOM概念与组成
- python处理csv文件列错位_CSV文件分割与列异常处理的python脚本
- json.hpp参数错误
- 以太坊上DeFi协议总锁仓量环比上升4.37%
- Filecoin Gas基础费率升至5.06 nanoFIL
- datetime与timestamp的区别
- paip.常用android手机软件----语音篇
- 基于MATLAB的人脸识别
- redies用途和使用场景
- 一种pluntUML实时渲染图片的方法
- 哈夫曼树构造及哈夫曼编码
- SeaweedFS安全配置(Security Configuration)
- isupper函数和isdigit函数
- 全国计算机等级考点申请,全国计算机等级考试(NCRE)考点申请书某高校(367)
- WifiManager自动连接wifi接入点
- 服务器操作系统tco的英文全称,云服务器ECS的英文全称
- LiveNVR传统安防摄像机接入互联网直播-支持多种分屏展示
热门文章
- 20万DBA最关注的11个问题
- 如何从零学习PostgreSQL Page结构
- 实战课堂:系统CPU高消耗的SQL筛选和最佳索引优化
- 云图说 | 华为云医疗智能体,智联大健康,AI药物研发
- 数据膨胀了?你的数仓又没有空间了?
- 【华为云技术分享】云小课 | 磁盘容量不够用?小课教你来扩容!
- 【华为大咖分享】5.交付在云端-全云DevOps研发实践(后附PPT下载地址)
- zabbix html使用c语言写的,zabbix 自定义LLD
- java没有更新_java – JProgressBar没有更新,找不到线索
- Kotlin学习笔记29(完结篇) Flow part2 Flow的Buffer 中间操作符zip 打平 异常处理 Flow的完成 onCompletion的优势 onCompletion陷阱