线程同步之经典生产者-消费者模型
2013-04-09 10:18
543 查看
/* 线程同步之生产者-消费者模型 该模型符合以下要求: 1、生产者只在仓储未满时生产,仓满则停止生产; 2、消费者只在仓储未空时消费,仓空则等待; 3、当消费者发现仓储为空时则通知生产者生产; 4、生产者在生产出可消费产品时则通知消费者来消费; */
package one; class Go{ public static final int MAX_NUM=100;//最大库存量 private int currennum;//当前库存 Go(){} Go(int currennum){ this.currennum=currennum; } public synchronized void produce(int neednum){ System.out.println("要生产的产品数量"+neednum+"与现有仓储靓之和大于最大仓储量"+MAX_NUM+",所以不能生产!!"); while(currennum+neednum>MAX_NUM){ try { this.wait();//使当前线程阻塞,并释放锁 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } currennum+=neednum; System.out.println("已经生产了"+neednum+",现在仓储量为:"+currennum); this.notifyAll();//不释放锁,也不获得锁,仅通知其他线程可以竞争执行 } public synchronized void consum(int neednum){ while(currennum<neednum){ System.out.println("现有仓储量不足,无法消费!!"); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } currennum-=neednum; System.out.println("已经消费了"+neednum+",现在仓储量为:"+currennum); this.notifyAll(); } } class Producer extends Thread{ private int neednum; private Go go; Producer(int neednum,Go go){ this.neednum=neednum; this.go=go; } public void run(){ go.produce(neednum); } } class Consumer extends Thread{ private int neednum; private Go go; Consumer(int neednum,Go go){ this.neednum=neednum; this.go=go; } public void run(){ go.consum(neednum); } } public class Practice extends Thread{ public static void main(String[] args){ Go go=new Go(30); new Consumer(50,go).start(); new Consumer(20,go).start(); new Consumer(30,go).start(); new Producer(10,go).start(); new Producer(10,go).start(); new Producer(10,go).start(); new Producer(10,go).start(); new Producer(10,go).start(); new Producer(80,go).start(); } }
摘自:http://blog.csdn.net/kutekute/article/details/8071421
相关文章推荐
- 线程同步之经典生产者-消费者模型
- 线程的同步与互斥(生产者与消费者模型)
- 线程经典代码二,(同步情况下的生产者/消费者关系)
- 线程经典代码一,(未同步情况下的生产者/消费者关系)
- Java线程同步:生产者-消费者 模型(代码示例)
- Java线程同步:生产者-消费者 模型(代码示例)
- 线程 同步与互斥-------消费者 生产者模型
- 线程的同步与互斥---生产者消费者模型
- 线程的同步与互斥---生产者消费者模型
- 经典生产者与消费者问题(线程的同步与互斥)
- 线程的同步与互斥(生产者与消费者模型)
- 用C#线程技术模拟“生产者-消费者”经典进程同步问题
- 从生产者-消费者模型了解线程、同步、锁(java)
- java线程同步经典——生产者消费者
- java: 线程间通信经典模型“生产者-消费者”模型的实现
- Java线程同步:生产者-消费者 模型(代码示例)
- 生产者--消费者模型(线程锁方式)
- Java线程同步实例 生产者 消费者问题分析
- 多线程---使用ManualResetEvent来控制线程间的同步(实现了消费者和生产者模式)
- 经典的生产者消费者模型(二)