线程同步之经典生产者-消费者模型
/* 线程同步之生产者-消费者模型 该模型符合以下要求: 1、生产者只在仓储未满时生产,仓满则停止生产; 2、消费者只在仓储未空时消费,仓空则等待; 3、当消费者发现仓储为空时则通知生产者生产; 4、生产者在生产出可消费产品时则通知消费者来消费; */
1 package one; 2 class Go{ 3 public static final int MAX_NUM=100;//最大库存量 4 private int currennum;//当前库存 5 Go(){} 6 Go(int currennum){ 7 this.currennum=currennum; 8 } 9 public synchronized void produce(int neednum){ 10 System.out.println("要生产的产品数量"+neednum+"与现有仓储靓之和大于最大仓储量"+MAX_NUM+",所以不能生产!!"); 11 while(currennum+neednum>MAX_NUM){ 12 try { 13 this.wait();//使当前线程阻塞,并释放锁 14 } catch (InterruptedException e) { 15 // TODO Auto-generated catch block 16 e.printStackTrace(); 17 } 18 } 19 currennum+=neednum; 20 System.out.println("已经生产了"+neednum+",现在仓储量为:"+currennum); 21 this.notifyAll();//不释放锁,也不获得锁,仅通知其他线程可以竞争执行 22 } 23 public synchronized void consum(int neednum){ 24 while(currennum<neednum){ 25 System.out.println("现有仓储量不足,无法消费!!"); 26 try { 27 this.wait(); 28 } catch (InterruptedException e) { 29 // TODO Auto-generated catch block 30 e.printStackTrace(); 31 } 32 } 33 currennum-=neednum; 34 System.out.println("已经消费了"+neednum+",现在仓储量为:"+currennum); 35 this.notifyAll(); 36 } 37 } 38 class Producer extends Thread{ 39 private int neednum; 40 private Go go; 41 Producer(int neednum,Go go){ 42 this.neednum=neednum; 43 this.go=go; 44 } 45 public void run(){ 46 go.produce(neednum); 47 } 48 } 49 class Consumer extends Thread{ 50 private int neednum; 51 private Go go; 52 Consumer(int neednum,Go go){ 53 this.neednum=neednum; 54 this.go=go; 55 } 56 public void run(){ 57 go.consum(neednum); 58 } 59 } 60 public class Practice extends Thread{ 61 public static void main(String[] args){ 62 Go go=new Go(30); 63 new Consumer(50,go).start(); 64 new Consumer(20,go).start(); 65 new Consumer(30,go).start(); 66 new Producer(10,go).start(); 67 new Producer(10,go).start(); 68 new Producer(10,go).start(); 69 new Producer(10,go).start(); 70 new Producer(10,go).start(); 71 new Producer(80,go).start(); 72 } 73 }
摘自:http://blog.csdn.net/kutekute/article/details/8071421
转载于:https://www.cnblogs.com/XL-Liang/archive/2013/04/09/3009451.html
线程同步之经典生产者-消费者模型相关推荐
- linux使用线程实现生产者消费者问题,Linux平台下线程同步,实现“生产者消费者问题”...
(1)线程同步,实现"生产者消费者问题" 要求:缓冲区大小为20,生产者每次放一个产品,消费者每次取走一个产品:生产者和消费者至少2个. (2)代码如下: #include #in ...
- 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池
并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...
- Python之进程+线程+协程(生产者消费者模型)
本篇主要总结一下非常有名的生成者消费者模型 概念引用 1.为什么要使用生产者和消费者模型? 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快, ...
- 生产者消费者代码c语言_由生产者消费者模型引出的线程同步问题
由生产者消费者模型引出的线程同步问题 基本生产者消费者模型: 代码示例: 数据模型: /*** Created by IntelliJ IDEA.** @Author: ZhangDong* @Dat ...
- 线程同步 生产者消费者 java_Java线程同步:生产者-消费者 模型(代码示例)
public class ThreadSyn { public static void main(String[] args) { new ThreadSyn(); } public ThreadSy ...
- C语言使用信号量解决生产者消费者模型的同步问题
友链 gcc 1.c -o 1 -lpthread // ..使用内存映射可以拷贝文件 /* 对原始文件进行内存映射 创建一个新文件 把新文件的数据拷贝映射到内存中 通过内存拷贝将第一个文件的内存映射 ...
- C语言 生产者消费者模型
友链 互斥量mutex 条件变量cond gcc 1.c -o 1 -lpthread // ..使用内存映射可以拷贝文件 /* 对原始文件进行内存映射 创建一个新文件 把新文件的数据拷贝映射到内存中 ...
- 操作系统 —— 生产者消费者模型
文章目录 1. 生产者消费者模型的理解 1.1 串行的概念 1.2 并行的概念 1.3 简单总结: 2. 基于阻塞队列(block queue)实现此模型 2.1 阻塞队列的实现 2.2 使用阻塞队列 ...
- < Linux > 多线程(生产者消费者模型)
目录 1.生产者消费者模型 生产者消费者模型的例子 生产者消费者模型的特点 生产者消费者模型的优点 2.基于BlockingQueue的生产者消费者模型 概念 模拟实现基于阻塞队列的生产消费模型 基于 ...
最新文章
- server sql 分组 去重 字符串拼接_SQL | 数据分析面试必备SQL语句+语法
- 你需要知道的缓存击穿/穿透/雪崩
- matlab在绘图区加格栅,实验二(2) MATLAB绘图
- 数据结构源码笔记(C语言描述)汇总
- java 登录牵手_Java: HttpURLConnection 模拟登录方法 (带cookie 的Post/Get)_20160908_七侠镇莫尛貝...
- POJ 1195 Mobile phones(裸的二维树状数组)
- 第一次训练赛的相关总结和教训!
- react直接使用bootstrap失效的原因
- 用RtlAdjustPrivilege来调整进程权限(VB6.0代码)
- or1200处理器的异常处理类指令介绍
- “10亿元身价”CEO的6个密码
- 一些关于java的笔记
- 亚像素边缘提取方法总结
- 04 _ 可扩展架构案例(一):电商平台架构是如何演变的?
- little-endian java_Little-Endian的JAVA
- 郑州共享美容院小程序开发如何操作?
- Java基础知识系列之-抽象abstract
- 转行产品经理必须要知道的三件事!
- 【Gin框架】框架入门
- [SAP] PP模块 - BOM ( Bill of Material)