package myTherad;
/**
* 生产者与消费者,多线程
* @author Administrator
*
*/
public class customerAndproduct {
public static void main(String[] args) {
/*构建dealer对象*/
Dealer dealer=new Dealer();
new testThread(dealer,"Customer").start();
new testThread(dealer,"Producer").start();
}
}
class Dealer{
int goods=0;
public synchronized int consume(){
int temp;
while(goods==0){
try{
wait(); //等待
}catch(InterruptedException e){
}
}
temp=goods;
System.out.println("consumed:"+temp);
goods--;
/*唤醒进程*/
notify();
return temp;
}
public synchronized void produce(int amount){
while(goods!=0){
try{
wait();
}catch(InterruptedException e){
}
}
goods=amount;
notify();
System.out.println("produce:"+goods);
}
}
class testThread extends Thread{
boolean producer;
Dealer dealer;
public testThread(Dealer d,String type){
dealer=d;
if(type.equals("Producer"))
producer=true;
if(type.equals("Consumer"))
producer=false;
}
public void run(){
for (int i = 0; i <20; i++) {
try{
sleep((int)(Math.random()*200));
}catch(InterruptedException e){
}
if(producer)
dealer.produce((int)(Math.random()*10)+1);
else
dealer.consume();
}
}
}