设为首页收藏本站language 语言切换
查看: 2355|回复: 5
收起左侧

[战报] java多线程模拟生产者消费者问题

[复制链接]
发表于 2012-6-4 17:18:43 | 显示全部楼层 |阅读模式
//java多线程模拟生产者消费者问题
//ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品
//Storage仓库
public class ProducerConsumer {
public static void main(String[] args) {
Storage s = new Storage();
Producer p = new Producer(s);
Consumer c = new Consumer(s);
Thread tp = new Thread(p);
Thread tc = new Thread(c);
tp.start();
tc.start();
}
}
class Consumer implements Runnable {//消费者
Storage s = null;
public Consumer(Storage s){
this.s = s;
}
public void run() {
for(int i=0; i<20; i++){
Product p = s.pop();//取出产品
try {
Thread.sleep((int)(Math.random()*1500));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Producer implements Runnable {//生产者
Storage s = null;
public Producer(Storage s){
this.s = s;
}
public void run() {
for(int i=0; i<20; i++){
Product p = new Product(i);
s.push(p); //放入产品
// System.out.println("生产者放入:" + p);
try {
Thread.sleep((int)(Math.random()*1500));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Product {
int id;
public Product(int id){
this.id = id;
}
public String toString(){//重写toString方法
return "产品:"+this.id;
}
}
class Storage {
int index = 0;
Product[] products = new Product[5];
public synchronized void push(Product p){//放入
while(index==this.products.length){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.products[index] = p;
System.out.println("生产者放入"+index+"位置:" + p);
index++;
this.notifyAll();
}
public synchronized Product pop(){//取出
while(this.index==0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
index--;
this.notifyAll();
System.out.println("消费者从"+ index+ "位置取出:" + this.products[index]);
return this.products[index];
}
}

发表于 2012-7-9 10:19:36 | 显示全部楼层
求实,求真相!!!
沙发 2012-7-9 10:19:36 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2013-5-1 09:22:43 | 显示全部楼层
学习学习
板凳 2013-5-1 09:22:43 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2014-10-21 12:54:32 | 显示全部楼层
学学一下,加油
地板 2014-10-21 12:54:32 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2015-2-9 14:19:10 | 显示全部楼层
顶下,很简洁的例子
6# 2015-2-9 14:19:10 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-1-31 01:20 , Processed in 0.059174 second(s), 10 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表