生产者消费者_【Java面试】实现生产者消费者模式
使用 BlockingQueue 实现生产者消费者模式
public class ProducerConsumerModel2 {
private static BlockingQueue queue = new ArrayBlockingQueue<>(5);public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(100); Runnable producer = () -> {try { queue.put("数据"); System.out.println("生产数据..."); } catch (InterruptedException e) { e.printStackTrace(); } finally { countDownLatch.countDown(); } }; Runnable consumer = () -> {try { String product = queue.take(); System.out.println("消费" + product + ".."); } catch (InterruptedException e) { e.printStackTrace(); } finally { countDownLatch.countDown(); } }; IntStream.rangeClosed(1, 50).forEach(i -> { CompletableFuture.runAsync(producer); CompletableFuture.runAsync(consumer); }); countDownLatch.await(); }}
使用 wait 和 notify 实现生产者消费者模式
public class ProducerConsumerModel { public static void main(String[] args) { EventStorage eventStorage = new EventStorage(); Producer producer = new Producer(eventStorage); Consumer consumer = new Consumer(eventStorage);
new Thread(producer).start(); new Thread(consumer).start(); }
static class Producer implements Runnable { private EventStorage storage;
public Producer(EventStorage storage) { this.storage = storage; }
@Override public void run() { for (int i = 0; i 100; i++) { storage.put(i); } } }
static class Consumer implements Runnable { private EventStorage storage;
public Consumer(EventStorage storage) { this.storage = storage; }
@Override public void run() { for (int i = 0; i 100; i++) { storage.take(i); } } }
static class EventStorage { private int size; private LinkedList storage;public EventStorage() { size = 10; storage = new LinkedList<>(); }public synchronized void put(int i) {while (storage.size() == this.size) {try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } storage.push("数据" + i); System.out.println("生产 -> 数据" + i + " 当前仓库中已经有了 " + storage.size() + " 条数据"); notify(); }public synchronized void take(int i) {while (storage.size() == 0) {try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("消费 -> " + storage.poll() + " 当前仓库中剩下 " + storage.size() + " 条数据"); notify(); } }}
源码地址:https://github.com/mirrormingzZ/JavaInterview
生产者消费者_【Java面试】实现生产者消费者模式相关推荐
- java 基础面试 英文_[Java面试] 面试java基础总结大全
原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...
- Java面试遇到的工厂模式
参考:https://blog.csdn.net/ithouse/article/details/93590797 工厂模式和抽象工厂模式的区别,以及如何实现 1.工厂方法模式只有一个抽象产品类,而抽 ...
- java 消费者模式 多线程_[Java并发-24-并发设计模式] 生产者-消费者模式,并发提高效率...
生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...
- java多线程生产者与消费者案例_多线程操作实例——生产者与消费者
面对多线程学习生产者与消费者是最基本的实例 对于java后端开发的人员必须要掌握,还有考研考试计算机操作系统的同鞋. 下面是三个实例对于生产者与消费者的的例子,层层递进,逐步解决问题. 问题:生产者- ...
- java consumed_Java设计模式—生产者消费者模式(阻塞队列实现)
生产者消费者模式是并发.多线程编程中经典的 真实世界中的生产者消费者模式 生产者和消费者模式在生活当中随处可见,它描述的是协调与协作的关系.比如一个人正在准备食物(生产者),而另一个人正在吃(消费者) ...
- 生产者消费者--TestPC.java
package org.shw.pc; public class TestPC {public static void main(String[] args) { Info info = new In ...
- java生产者消费者代码_Java实现Kafka生产者消费者代码实例
Kafka的结构与RabbitMQ类似,消息生产者向Kafka服务器发送消息,Kafka接收消息后,再投递给消费者. 生产者的消费会被发送到Topic中,Topic中保存着各类数据,每一条数据都使用键 ...
- java中的生产者消费者模式详解
方式 一: Synchronized方式 注:此种方式会造成资源的浪费: 利用锁的notifyAll()方法会将所有的线程都唤醒,会造成资源的浪费 class Resource {private St ...
- JAVA线程之生产者消费者问题
复习下JAVA线程基础知识: 1.线程的状态: 创建状态:创建了线程对象,此时线程有了相应的内存空间和其他资源,但处于不可运行状态. 就绪状态:线程对象调用start()方法启动线程,进入就绪状态,此 ...
- delphi生产者消费者模式代码_并发设计模式:生产者-消费者模式,并发提高效率...
生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...
最新文章
- 云迹科技:站在酒店场景服务机器人的风口
- linux中sh+$0,浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释
- Tomcat输出catalina.out的大小控制
- oracle 10741 trace,RedHat5.3上安装Oracle 10.2.0.1
- 推荐一些数据挖掘和生信友好的SCI!
- 9206 1225 mybank系统 随堂笔记
- 程序员面试被问到“三次握手,四次挥手”怎么办?
- java方法被编译器调用_我异常了,快来捕获我,Java异常简述
- Makefile中关于all和.PHONY
- JavaScript学习指南 修订版pdf
- matlab画圆的命令_matlab画矩形和matlab画圆
- matlabGUI入门
- 关于iPhone5耳机一个响解决办法(部分原因)
- 如何将lvm卷移动到另一台服务器中
- 计算机机房普通照明,计算机机房对照明的要求
- abp viewmodel的写法
- Docker测试环境笔记
- 【论文阅读】Scene Text Image Super-Resolution in the Wild
- 【CSS】css3绘制各种形状图形三角形,菱形,五角星,椭圆等
- LINUX内核第一霸
热门文章
- 医药/医疗/互联网医疗平台/问诊/挂号/开药/处方/复诊/患者管理/开药问诊/视频问诊/电话问诊/图文问诊/医生端/医师认证/医院/药品/续方/常用处方/电子处方/抢单/接诊/退诊/预约/科室/开方
- 使用Github官方提供的gitignore过滤Git提交的文件
- Python【第一篇】python安装、pip基本用法、变量、输入输出、流程控制、循环
- .NET Core微服务之基于EasyNetQ使用RabbitMQ消息队列
- GrapeCity Documents for Excel 与 Apache POI 功能对比
- 第一周-第11章节-Python3.5-if else流程判断
- The type 'System.Object' is defined in an assembly that is not referenced
- BZOJ.3524.[POI2014]Couriers(主席树)
- Nginx实用教程(二):配置文件入门
- Node buffer