您的位置:首页 > 大数据 > 人工智能

生产者消费者例子-采用wait()和notify()

2016-01-19 17:40 429 查看
package com.ProductA
4000
ndConsume;

public class Storage {
private int maxnum;
private int left;
public Storage(int max){
this.maxnum = max;
}
public synchronized void product(int expect){
while(true){
System.out.println("start to product");
if(expect>this.maxnum){
System.out.println("The storage max is:"+this.maxnum+",you can only product that");
expect = this.maxnum;
}
System.out.println("thread:"+Thread.currentThread().getName()+",expect product:"+expect);
if(left>=maxnum){
try {
System.out.println("product wait left:"+left+",expect:"+expect);
wait();
} catch (InterruptedException e) {

}
}
left += (maxnum-left)>expect?expect:maxnum-left;
System.out.println("thread:"+Thread.currentThread().getName()+",product over,left:"+left+",expect:"+expect);
notifyAll();
}
}
public synchronized void consume(int expect){
while(true){
System.out.println("start to consume");
if(expect>this.maxnum){
System.out.println("The storage max is:"+this.maxnum+",you can only product that");
expect = this.maxnum;
}
System.out.println("thread:"+Thread.currentThread().getName()+",expect consume:"+expect);
if(left<expect try="" system="" out="" println="" consume="" wait="" left:="" left="" expect:="" expect="" catch="" interruptedexception="" e="" todo="" auto-generated="" block="" printstacktrace="" -="(left-expect)">0?expect:left;
System.out.println("thread:"+Thread.currentThread().getName()+",consume over,left:"+left+",expect:"+expect);
notifyAll();
}
}
public static void main(String[] args){
Storage storage = new Storage(200);
Producer producer1 = new Producer(storage, 10);
Consumer consumer2 = new Consumer(storage, 30);
Thread thread1 = new Thread(producer1);
thread1.start();
Thread thread2 = new Thread(consumer2);
thread2.start();
}
}

</expect>
package com.ProductAndConsume;

public class Producer implements Runnable {
private int expect;
private Storage storage;
public Producer(Storage storage,int expect){
this.storage = storage;
this.expect = expect;
}
@Override
public void run() {
storage.product(expect);
}

}
package com.ProductAndConsume;

public class Consumer implements Runnable {
private int expect;
private Storage storage;
public Consumer(Storage storage,int expect){
this.storage = storage;
this.expect = expect;
}
@Override
public void run() {
storage.consume(expect);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  生产者消费者