并发协作模型“生产者/消费者模式”—>管程法

  • 生产者:负责生产数据的模块(可能是方法,对象,线程,进程);

  • 消费者:负责处理数据的模块(可能是方法,对象,线程,进程);

  • 缓冲区:消费者不能直接使用生产者的数据,他们之间有个“缓冲区”

  • 生产者将生产好的数据放入缓冲区,消费者从缓冲区拿出数据

管程法 案例

package Thread;import java.awt.*;//测试:生产者消费者模型--->利用缓冲区:管理法
public class TestPc {public static void main(String[] args) {synContainer container=new synContainer();new Productor(container).start();new Consumer(container).start();}}//生产者
class Productor extends Thread{synContainer container;public  Productor(synContainer container){this.container=container;}//生产public  void run(){for (int i = 0; i < 100; i++) {container.push(new Chicken(i));System.out.println("生产了"+i+"只鸡");}}
}//消费者
class Consumer extends Thread{synContainer container;public Consumer(synContainer container){this.container=container;}//消费public  void run(){for (int i = 0; i < 100; i++) {System.out.println("消费了--->"+container.pop().id+"只鸡");}}
}//产品
class  Chicken{//产品编号int id;public  Chicken(int id){this.id=id;}
}//缓冲区
class synContainer {//需要一个容器大小Chicken[] chickens=new Chicken[10];//容器计数器int count=0;//生产者放入产品public synchronized  void push(Chicken chicken){//如果容器满了,就需要等待消费者消费if (count==chickens.length){//通知消费者消费,生产等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//如果没有满, 我们就需要丢入产品chickens[count]=chicken;count++;//可以通知消费者消费了。this.notifyAll();}//消费者消费产品public synchronized  Chicken pop(){//判断能否消费if(count==0){//等待生产者消费,消费者等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//如果可以消费count--;Chicken chicken =chickens[count];//吃完了, 通知生产者生产this.notifyAll();return chicken;}}

生产者消费模型-管程法相关推荐

  1. 生产者消费者模型-管程法(Java)

    生产者消费者模型-管程法(Java) package src.thread;//生产者 消费者 产品 缓冲区 public class TestPC {public static void main( ...

  2. 利用互斥锁和条件变量实现生产者消费模型

    以下内容全部来自于自旋锁_哔哩哔哩_bilibili #include <stdio.h> #include <pthread.h> #include <stdlib.h ...

  3. 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来

    题目要求: 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来.(这是一道百度面试的算 ...

  4. java 生产者消费者_Java多线程:线程间通信—生产者消费者模型

    一.背景 && 定义 多线程环境下,只要有并发问题,就要保证数据的安全性,一般指的是通过 synchronized 来进行同步. 另一个问题是, 多个线程之间如何协作呢 ? 我们看一个 ...

  5. 生产者/消费者模型详解(基于Java)

    title: 生产者消费者模型 tags: 多线程 synchronized 锁 wait() notify() 生产者/消费者模型原理以及代码实现 一.生产者/消费者模型原理 所谓的生产者消费者模型 ...

  6. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  7. 11.python并发入门(part8 基于线程队列实现生产者消费者模型)

    一.什么是生产者消费者模型? 生产者就是生产数据的线程,消费者指的就是消费数据的线程. 在多线程开发过程中,生产者的速度比消费者的速度快,那么生产者就必须等待消费者把数据处理完,生产者才会产生新的数据 ...

  8. 线程同步之经典生产者-消费者模型

    /* 线程同步之生产者-消费者模型 该模型符合以下要求: 1.生产者只在仓储未满时生产,仓满则停止生产: 2.消费者只在仓储未空时消费,仓空则等待: 3.当消费者发现仓储为空时则通知生产者生产: 4. ...

  9. Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型...

    一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...

最新文章

  1. Android --- ListView之高度由 item 的个数决定,wrap_content有效
  2. windows系统中hosts文件位置
  3. 移动端web自适应适配布局解决方案
  4. java 与C++ 数据类型大小
  5. 中航工业集团金网络(北京)电子商务有限公司副总经理刘正珩:航空“智”造的供应链支撑平台...
  6. 《走遍中国》珍藏版(五)
  7. 使用Spring Boot和Project Reactor处理SQS消息-第2部分
  8. 20-Joint entity and relation extraction based on a hybrid neural network(LSTM-ED+CNN),考虑长距离的实体标签之间的关
  9. java 类图 xmind_轻松学习UML之类图,状态图
  10. Shell和C输出黑白棋盘
  11. android多线程计时器,Android 计时器Timer用法
  12. 7款堪称神器的黑科技App,每一款都是黑科技十足!
  13. html小游戏开题报告,html5毕设开题报告
  14. 捷速编辑pdf文件插入图片的方法
  15. mysql拼接单引号_sql语句的拼接单引号和双引号的问题
  16. Ubuntu系统直接拷贝硬盘克隆
  17. 【官方文档】Fluent Bit 简介
  18. IDEA中MAVEN项目Dependency not found 问题
  19. vue实现Excel文件导入导出
  20. 一文看懂新能源汽车国家政策(附政策汇总)

热门文章

  1. App 应用测试方法以及测试思路……
  2. 基于Visual Studio 2003/2005的Office插件开发FAQ
  3. Android中日志打印 Log的使用
  4. 第7讲 替代定理、戴维南定理、诺顿定理
  5. html中banner属性,banner是什么
  6. banner自适应屏幕代码
  7. 2800首无损格式经典歌曲分享
  8. 北斗ATGM332D定位 gps驱动
  9. 在外企上班是一种什么体验?附国内热门外企公司名单!
  10. unity开发炉石传说系列卡牌生成代码部分代码