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写一个生产者-消费者队列相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. javaweb 常用jar包_使用javaweb写一个登录案例

    下载地址:https://gitee.com/dl_shrimp/java_web_login_case.git https://www.zhihu.com/video/124178088859969 ...

  3. java 链表 最小堆优先级队列_关于Java集合的小抄

    List ArrayList 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值.默认第一次插入元 ...

  4. java 头尾 队列_探索JAVA并发 - 并发容器全家福

    14个并发容器,你用过几个? 不考虑多线程并发的情况下,容器类一般使用ArrayList.HashMap等线程不安全的类,效率更高.在并发场景下,常会用到ConcurrentHashMap.Array ...

  5. java 结合redis队列_在 Java 中使用 redis 的消息队列服务

    前言 关于 redis 我们前面已经讨论过了缓存.分布式锁.分布式唯一标识.LBS服务的用法,这里我们来谈谈利用 redis 来实现一个消息服务. 典型的消息服务是一个生产者和消费者模式的服务.一般是 ...

  6. java redis延迟队列_基于redis实现的延迟消息队列

    delay-queue redis实现延迟消息队列 需求背景 最近在做一个排队取号的系统 在用户预约时间到达前XX分钟发短信通知 在用户预约时间结束时要判断用户是否去取号了,不然就记录为爽约 在用户取 ...

  7. 用java做一个简单记事本_用记事本写一个简单的java程序

    用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...

  8. cmd写java程序_用cmd写一个最简单的Java程序

    一,准备: 1.确保电脑中装有eclipse软件并且确保配置好环境变量 (1)环境变量配置方法: 特别提示:jdk和eclipse保存的路径不能有中文字符 1.打开我的电脑--属性--高级--环境变量 ...

  9. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

最新文章

  1. Jupyter中出现ModuleNotFoundError: No module named ‘matplotlib‘的解决办法
  2. vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决
  3. python pandas读写excel_python pandas读写excel
  4. [JS-BOM]BOM概念与组成
  5. python处理csv文件列错位_CSV文件分割与列异常处理的python脚本
  6. json.hpp参数错误
  7. 以太坊上DeFi协议总锁仓量环比上升4.37%
  8. Filecoin Gas基础费率升至5.06 nanoFIL
  9. datetime与timestamp的区别
  10. paip.常用android手机软件----语音篇
  11. 基于MATLAB的人脸识别
  12. redies用途和使用场景
  13. 一种pluntUML实时渲染图片的方法
  14. 哈夫曼树构造及哈夫曼编码
  15. SeaweedFS安全配置(Security Configuration)
  16. isupper函数和isdigit函数
  17. 全国计算机等级考点申请,全国计算机等级考试(NCRE)考点申请书某高校(367)
  18. WifiManager自动连接wifi接入点
  19. 服务器操作系统tco的英文全称,云服务器ECS的英文全称
  20. LiveNVR传统安防摄像机接入互联网直播-支持多种分屏展示

热门文章

  1. 20万DBA最关注的11个问题
  2. 如何从零学习PostgreSQL Page结构
  3. 实战课堂:系统CPU高消耗的SQL筛选和最佳索引优化
  4. 云图说 | 华为云医疗智能体,智联大健康,AI药物研发
  5. 数据膨胀了?你的数仓又没有空间了?
  6. 【华为云技术分享】云小课 | 磁盘容量不够用?小课教你来扩容!
  7. 【华为大咖分享】5.交付在云端-全云DevOps研发实践(后附PPT下载地址)
  8. zabbix html使用c语言写的,zabbix 自定义LLD
  9. java没有更新_java – JProgressBar没有更新,找不到线索
  10. Kotlin学习笔记29(完结篇) Flow part2 Flow的Buffer 中间操作符zip 打平 异常处理 Flow的完成 onCompletion的优势 onCompletion陷阱