import java.util.LinkedList;

class Storage{
private static final int MAX = 100;
LinkedList<Object> list = new LinkedList<>(); public void produce(int num) throws Exception{
synchronized(list){
while(list.size() + num > MAX){
System.out.println("仓库太小,生产装不下!!");
list.wait();
}
for(int i=0; i<num; i++)
list.add(new Object());
System.out.println("生产了---" + num);
list.notifyAll();
}
}
public void consume(int num) throws Exception{
synchronized(list){
while(list.size() < num){
System.out.println("仓库的库存不够");
list.wait();
}
for(int i=0; i<num; i++)
list.remove();
System.out.println("消费了---" + num);
list.notifyAll();
}
}
} class Producer implements Runnable{
private int num;
private Storage storage;
public Producer(int num, Storage storage){
this.num = num;
this.storage = storage;
}
public void produce(){
try{
storage.produce(num);
}catch(Exception e){
e.printStackTrace();
}
}
public void run(){
produce();
}
} class Consumer implements Runnable{
private int num;
private Storage storage;
public Consumer(int num, Storage storage){
this.num = num;
this.storage = storage;
}
public void consume(){
try{
storage.consume(num);
}catch(Exception e){
e.printStackTrace();
}
}
public void run(){
consume();
}
} public class Pro_Con{
public static void main(String[] args){
Storage st = new Storage(); Producer p1 = new Producer(10, st);
Producer p2 = new Producer(80, st); Consumer c1 = new Consumer(40, st);
Consumer c2 = new Consumer(70, st); new Thread(c1, "消费者1").start();
new Thread(c2, "消费者2").start();
new Thread(p1, "生产者2").start();
new Thread(p2, "生产者2").start();
}
}

最新文章

  1. GreenDao数据库框架的配置与增删改查
  2. 笔记:html 拾遗之一
  3. lucene-查询query-&gt;QueryParser
  4. 配置editplus,讓其支持代碼自動格式化功能.
  5. ActiveMQ学习(二)——MQ的工作原理
  6. html 全选或全不选小案例
  7. java udp网络编程
  8. Ubuntu package managerment tools
  9. CU社区shell板块awk十三问整理
  10. angluarjs2入门学习资源
  11. 深入分析Parquet列式存储格式【转】
  12. 解决Ubuntu17.04以上系统,yarn init报错
  13. [No000011E]Python教程1/9-Python简介
  14. 9.用js制作静态分页
  15. 得到ImageView中drawable显示的区域的计算方法
  16. 两种方法实现js页面隔几秒后跳转,及区别
  17. 【BZOJ5091】摘苹果 概率
  18. Mac下进行基于java服务端语言的微信公众号本地js-sdk调试的大致方法
  19. windows上SVN图标不显示
  20. redis cluster 集群畅谈(一)

热门文章

  1. JVM:java类的加载机制
  2. js屏蔽鼠标操作
  3. canvas绘制圆环
  4. Eclipse Action
  5. XCode 如何真机运行别人的demo项目
  6. [javascript]什么是闭包?
  7. 关于VisualStudio2010发布项目问题
  8. Windows 系统System帐号及权限
  9. eplise一键集成工具
  10. testng失败重跑