博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Consumer VS Producer
阅读量:5863 次
发布时间:2019-06-19

本文共 2368 字,大约阅读时间需要 7 分钟。

生产者与消费者模型中,要保证以下几点:

1 同一时间内只能有一个生产者生产
2 同一时间内只能有一个消费者消费
3 生产者生产的同时消费者不能消费
4 消息队列满时生产者不能继续生产
5 消息队列空时消费者不能继续消费

package ying.threadWait;import java.util.Vector;public class TestConsumer {				public static void main(String[] args) { 		WareHouse warehouse = new WareHouse(0) ; 		Producer pro1 = new Producer(15 , warehouse) ; 	 		Consumer cust1 = new Consumer(30 , warehouse) ;  		Consumer cust2 = new Consumer(20 , warehouse) ;  		Consumer cust3 = new Consumer(15 , warehouse) ;  					pro1.start() ; 		 		cust1.start() ; 		cust2.start() ; 		cust3.start() ; 		System.out.println("Bye"); 		}}	class WareHouse { 	public int cur_size ; 	public final static int max_size = 50 ; 		public WareHouse() { 	}		public WareHouse(int size) { 		this.cur_size = size ; 	}			public synchronized void produce(int produceNum) { 		while (produceNum + cur_size > max_size) { 			System.out.println("The quantity of product to produce is " + produceNum 									+ " which is over the remaining storage limit : " + (max_size - cur_size));			try {					System.out.println("Producer " + Thread.currentThread().getName() + " waits"); 				wait() ;			} catch (InterruptedException e) {										e.printStackTrace();			} 			}					cur_size += produceNum ; 		System.out.println(Thread.currentThread().getName() + " has produced " + produceNum + " pieces of product."); 		notifyAll() ; 		}					public synchronized void consume(int needNum) { 			while (needNum > cur_size) { 				try {							System.out.println("Consumer " + Thread.currentThread().getName() + " waits"); 					wait() ;				} catch (InterruptedException e) {													e.printStackTrace();				} 			}				cur_size -= needNum ; 				System.out.println("The customer has consumed " + needNum + " pieces of product.");				notifyAll() ; 	}							}		class Producer extends Thread { 	private int produceNum ; 	private WareHouse warehouse ; 		Producer(int num , WareHouse house) { 		this.produceNum = num ;  		this.warehouse = house ; 	} 				public void run() { 			while (true) { 			warehouse.produce(produceNum) ; 				} 	}		}
class Consumer extends Thread { 	private int needNum ; 	private WareHouse warehouse ; 		Consumer(int num , WareHouse warehouse) { 		this.needNum = num ; 		this.warehouse = warehouse ; 	}				public void run() { 		warehouse.consume(needNum) ; 	}}

 有空时可以参考:

转载于:https://www.cnblogs.com/diyingyun/archive/2011/12/25/2301202.html

你可能感兴趣的文章
js排序算法机其他普通算法
查看>>
C#设计模式系列:迭代器模式(Iterator)
查看>>
循环神经网络(Recurrent Neural Networks, RNN)介绍
查看>>
js代码自动生成
查看>>
开源实时日志分析ELK
查看>>
关于常用的工具函数utill.js
查看>>
Java学习: 面向对象的使用与注意事项
查看>>
BZOJ 4589 Hard Nim ——FWT
查看>>
使用Xcode和Instruments调试解决iOS内存泄露
查看>>
MSDN-资源分享
查看>>
centos7安装mysql(yum)
查看>>
dom 学习的开始~简单留言1
查看>>
读书笔记之:Boost程序库完全开发指南(ch5-16)
查看>>
点击事件触发mouseleave事件
查看>>
CentOS 7运维管理笔记(1)----设置默认启动模式为GUI模式或命令行模式
查看>>
CodeChef Gcd Queries
查看>>
两两组合覆盖测试用例设计工具:PICT
查看>>
【转载】 [你必须知道的.NET]目录导航
查看>>
Java8 Lambda表达式和流操作如何让你的代码变慢5倍
查看>>
python面试知识总结
查看>>