生产者与消费者-1:N-基于list
一个生产者/多个消费者:
1 /** 2 * 生产者 3 */ 4 public class P { 5 6 private MyStack stack; 7 8 public P(MyStack stack) { 9 this.stack = stack; 10 } 11 12 public void pushService() { 13 stack.push(); 14 } 15 }
1 /** 2 * 消费者 3 */ 4 public class C { 5 6 private MyStack stack; 7 8 public C(MyStack stack) { 9 this.stack = stack; 10 } 11 12 public void popService() { 13 System.out.println("pop = " + stack.pop()); 14 } 15 }
1 /** 2 * 模拟栈 3 */ 4 public class MyStack { 5 6 private List<Object> list = new ArrayList<>(); 7 8 public synchronized void push() { 9 try { 10 while(list.size() == 1) { 11 this.wait(); 12 } 13 list.add(""+Math.random()); 14 this.notifyAll(); 15 System.out.println("push:" + list.size()); 16 } catch (InterruptedException e) { 17 e.printStackTrace(); 18 } 19 } 20 21 public synchronized String pop() { 22 String value = ""; 23 try { 24 while(list.size() == 0) { 25 System.out.println("pop 操作中:" + Thread.currentThread().getName() + "wait状态"); 26 this.wait(); 27 } 28 value = ""+list.get(0); 29 list.remove(0); 30 this.notifyAll(); 31 System.out.println("pop:" + list.size()); 32 } catch (InterruptedException e) { 33 e.printStackTrace(); 34 } 35 return value; 36 } 37 }
1 /** 2 * 生产者线程 3 */ 4 public class P_Thread extends Thread { 5 6 private P p; 7 8 public P_Thread(P p) { 9 this.p = p; 10 } 11 12 @Override 13 public void run() { 14 while (true) { 15 p.pushService(); 16 } 17 } 18 }
1 /** 2 * 消费者线程 3 */ 4 public class C_Thread extends Thread { 5 6 private C c; 7 8 public C_Thread(C c) { 9 this.c = c; 10 } 11 12 @Override 13 public void run() { 14 while (true) { 15 c.popService(); 16 } 17 } 18 }
1 /** 2 * 测试类 3 */ 4 public class Run { 5 6 public static void main(String[] args) { 7 MyStack stack = new MyStack(); 8 //一个生产者 9 P p = new P(stack); 10 //多个消费者 11 C c1 = new C(stack); 12 C c2 = new C(stack); 13 C c3 = new C(stack); 14 15 //一个生产者线程 16 P_Thread pThread = new P_Thread(p); 17 //多个消费者线程 18 C_Thread cThread1 = new C_Thread(c1); 19 C_Thread cThread2 = new C_Thread(c2); 20 C_Thread cThread3 = new C_Thread(c3); 21 22 //启动 23 pThread.start(); 24 cThread1.start(); 25 cThread2.start(); 26 cThread3.start(); 27 } 28 }
运行结果如下:
转载于:https://www.cnblogs.com/wang1001/p/9561610.html
生产者与消费者-1:N-基于list相关推荐
- linux使用线程实现生产者消费者问题,Linux下生产者与消费者的线程实现
代码见<现代操作系统> 第3版. 为了显示效果,添加了printf()函数来显示运行效果 #include #include #define MAX 20 pthread_mutex_t ...
- java消费者模式_基于Java 生产者消费者模式(详细分析)
生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...
- Linux系统编程40:多线程之基于环形队列的生产者与消费者模型
文章目录 (1)什么是信号量 (2)与信号量相关的操作 (3)基于环形队列的生产者与消费者模型-信号量(单消费者单生产者) (1)什么是信号量 前面的叙述中,我们通过锁保证了每次只有一个线程进入临界区 ...
- Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型
文章目录 (1)生产者与消费者模型概述 (2)生产者与消费者模型优点 (3)基于阻塞队列(blockingqueue)的生产者消费者模型(单消费者单生产者) (4)基于阻塞队列(blockingque ...
- [Linux]生产者消费者模型(基于BlockQueue的生产者消费者模型 | 基于环形队列的生产者消费者模型 | 信号量 )
文章目录 生产者消费者模型 函数调用角度理解生产者消费者模型 生活角度理解生产者消费者模型 为什么要使用生产者消费者模型 生产者消费者模型优点 321原则 基于BlockingQueue的生产者消费者 ...
- 基于java多线程来实现生产者和消费者的实例
声明:本实例是在网上看到,做了很小的修改.所以感谢之前的作者.只是一时忘了哪儿看到,没法加入链接,向原作者道歉,以示尊重.抱歉-^)... 同步栈: 1 class SycnStack { 2 pri ...
- 基于kafka_2.11-2.1.0实现的生产者和消费者代码样例
1.搭建部署好zookeeper集群和kafka集群,这里省略. 1 启动zk: 2 bin/zkServer.sh start conf/zoo.cfg. 3 验证zk是否启动成功: 4 bin/z ...
- Java中生产者与消费者问题的演变
想要了解更多关于Java生产者消费者问题的演变吗?那就看看这篇文章吧,我们分别用旧方法和新方法来处理这个问题. 生产者消费者问题是一个典型的多进程同步问题. 对于大多数人来说,这个问题可能是我们在学校 ...
- 生产者,消费者,CDN
1 生产者消费者模型应用场景及优势? 什么是生产者消费者模型 在 工作中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进 ...
- 网络爬虫:分离生产者和消费者来优化爬虫程序
问题描述: 基于前面的一些工作(可点击这里参见笔者前面的相关博客),我们取得了一些成果.不过存在的问题又总是会让人坐立不安.本文通过分离生产者.消费者以及引入连接池技术来优化爬虫程序.解决前面说到的数 ...
最新文章
- HTML——meta
- android support Percent支持库开发
- 如何修改被编译后DLL文件
- python3之协程(4)---gevent实现协程操作
- 什么是Mockito Extra接口?
- 汇博工业机器人码垛机怎么写_全自动码垛机器人在企业生产中的地位越来越重要...
- (王道408考研操作系统)第一章计算机系统概述-第一节1:操作系统基本概念以及目标和功能
- 图系列(一)图神经网络
- 前端-----今日份小练习
- CAD2016入门教程
- Vista 自动激活工具(最新 最权威 所有版本 可升级)
- 网站为什么要做外链?
- freeswitch呼叫中心之百度MRCP语音合成识别环境搭建
- 做完系统回来计算机连接不上网络,电脑重装win7系统后连不上网怎么办_win7重装系统连不上网如何解决...
- 针对Object和Array深拷贝处理
- x+=x-=x*x; 和 x-=x*x; x+=x;
- Maven学习(一)---Maven简介
- linux启动mysql失败,Fatal error: Can‘t open and lock privilege tables: Table ‘mysql.host‘ doesn‘t exist
- sql中如何添加数据
- 如何安装xampp(linux版)
热门文章
- axt测试软件,【测试工具】这些APP实用测试工具,不知道你就out了!
- flask_sqlalchemy 多对多重复插入解决办法
- 1.解决python中导入包不成功的问题(出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url问题)
- 人群分割--Fully Convolutional Neural Networks for Crowd Segmentation
- 如何改变anaconda 的 gcc 版本?
- LeetCode 93. Restore IP Addresses--面试算法题--Python解法
- java事件驱动模型_Spring事件驱动模型详解
- C++——新类型与原始字面量(原始字符串)
- 浪潮服务器开始虚拟化,(浪潮服务器-虚拟化解决方案.ppt
- java内存规范_Java内存模型-jsr133规范介绍