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