java 生产者和消费者——BlockingQueue方式详解编程语言
2023-06-13 09:11:50 时间
java 生产者和消费者——Synchronized方式 java 生产者和消费者——ReentrantLock方式 java 生产者和消费者——BlockingQueue方式
利用阻塞队列如下特性实现生产者和消费者模式
put 添加一个元素 如果队列满,则阻塞 take 移除并返回队列头部的元素 如果队列为空,则阻塞/** * 生产者消费者问题: 容器最多放5个商品;当容器未装满时,生产者一直生产商品并放入容器中,当容器中有商品时,消费者就一直消费商品; 情景: * 生产者生产20个商品并被消费者消费 public class ProducerAndComsumerDemo {
ProducerAndComsumerDemo demo = new ProducerAndComsumerDemo(); new Thread(demo.new Producer()).start(); new Thread(demo.new Consumer()).start(); class Producer implements Runnable {
queue.put(i); System.out.println("生产者 生产前 总共有 " + pruductsSum + " 个商品"); pruductsSum++; System.out.println("生产者 生产后 总共有 " + pruductsSum + " 个商品"); System.out.println("---------------------------------------------------------------------------"); } catch (InterruptedException e) { e.printStackTrace(); class Consumer implements Runnable {
System.out.println("消费 " + take); System.out.println("消费者 消费前 总共有 " + pruductsSum + " 个商品"); pruductsSum--; System.out.println("消费者 消费后 总共有 " + pruductsSum + " 个商品"); System.out.println("---------------------------------------------------------------------------"); } catch (InterruptedException e) { e.printStackTrace();
运行结果的其中一次日志
生产者 生产前 总共有 0 个商品 生产者 生产后 总共有 1 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 1 个商品 生产者 生产后 总共有 2 个商品 --------------------------------------------------------------------------- 消费 0 消费者 消费前 总共有 2 个商品 消费者 消费后 总共有 1 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 1 个商品 生产者 生产后 总共有 2 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 2 个商品 生产者 生产后 总共有 3 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 3 个商品 生产者 生产后 总共有 4 个商品 --------------------------------------------------------------------------- 消费 1 消费者 消费前 总共有 4 个商品 消费者 消费后 总共有 3 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 3 个商品 生产者 生产后 总共有 4 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 4 个商品 生产者 生产后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 2 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 4 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 3 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 6 个商品 --------------------------------------------------------------------------- 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 4 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 6 个商品 --------------------------------------------------------------------------- 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 5 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 6 个商品 --------------------------------------------------------------------------- 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 6 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 6 个商品 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 5 个商品 --------------------------------------------------------------------------- --------------------------------------------------------------------------- 消费 7 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 6 个商品 --------------------------------------------------------------------------- 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 8 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 6 个商品 --------------------------------------------------------------------------- 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 9 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 4 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 10 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 4 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 11 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 4 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 12 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 6 个商品 --------------------------------------------------------------------------- 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 13 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 6 个商品 --------------------------------------------------------------------------- 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 14 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 4 个商品 --------------------------------------------------------------------------- 生产者 生产前 总共有 5 个商品 生产者 生产后 总共有 5 个商品 --------------------------------------------------------------------------- 消费 15 消费者 消费前 总共有 5 个商品 消费者 消费后 总共有 4 个商品 --------------------------------------------------------------------------- 消费 16 消费者 消费前 总共有 4 个商品 消费者 消费后 总共有 3 个商品 --------------------------------------------------------------------------- 消费 17 消费者 消费前 总共有 3 个商品 消费者 消费后 总共有 2 个商品 --------------------------------------------------------------------------- 消费 18 消费者 消费前 总共有 2 个商品 消费者 消费后 总共有 1 个商品 --------------------------------------------------------------------------- 消费 19 消费者 消费前 总共有 1 个商品 消费者 消费后 总共有 0 个商品 ---------------------------------------------------------------------------
仅此记录
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18737.html
cjavaxml相关文章
- Java多线程高并发学习笔记(一)——Thread&Runnable详解编程语言
- Java IO系列(三):DataInputStream,DataOutputStream和RandomAccessFile详解编程语言
- Java 读取 .properties 配置文件的几种方式详解编程语言
- Java 等额本金等额本息工具类详解编程语言
- 用java实现的文件夹复制与删除的程序详解编程语言
- Java String工具类StringHelper详解编程语言
- JAVA的AES加密步骤解释详解编程语言
- Java通过zip压缩文件详解编程语言
- java为什么要用类型擦除实现泛型详解编程语言
- java基础之反射详解编程语言
- java线程间通信详解编程语言
- java 时间戳与日期字符串相互转换详解编程语言
- java学习笔记16–异常详解编程语言
- java基础之Date类知识详细学习详解编程语言
- Java之创建对象>3.Enforce the singleton property with a private constructor or an enum type详解编程语言
- Java Base64加密解密详解编程语言
- java基础之switch语句的深入解析详解编程语言
- java中for循环的特殊:foreach的使用详解编程语言
- java获取网页源码详解编程语言
- java.lang.StackOverflowError详解编程语言
- Java多线程21:多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解编程语言
- Linux调用Java实现编程快速开发(linux调用java)
- 数据库的操作Java与MySQL搭配:完美数据库操作(java对mysql)