public class Producer_Consumer {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GoDown gd=new GoDown(20);
Producer p=new Producer(10,gd);
Producer p2=new Producer(30,gd);
Producer p3=new Producer(30,gd);
Producer p4=new Producer(40,gd);
Producer p5=new Producer(50,gd);
Customer c1=new Customer(10,gd);
Customer c2=new Customer(50,gd);
Customer c3=new Customer(60,gd);
Customer c4=new Customer(10,gd);
Customer c5=new Customer(10,gd);
p.start();
p2.start();
p3.start();
p4.start();
p5.start();
c1.start();
c2.start();
c3.start();
c4.start();
c5.start();
}
}
class GoDown{
public static final int MAX_NUM=100;
public int curr_num;
public GoDown(){}
public GoDown(int num){
this.curr_num=num;
}
public synchronized void produce(int n){
while((this.curr_num+n)>MAX_NUM)
{
System.out.println("倉庫已經滿了,不能再生產了!");
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
curr_num+=n;
System.out.println("已經生產了"+n+"個產品,庫存爲"+curr_num+"個產品。");
notifyAll();
}
public synchronized void consume(int n){
while(this.curr_num<n)
{
System.out.println("庫存產品不夠了!");
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
curr_num-=n;
System.out.println("已經消費了"+n+"個產品,庫存爲"+curr_num+"個產品。");
notifyAll();
}
}
class Customer extends Thread{
private int num;
private GoDown godown;
public Customer(int num, GoDown godown) {
super();
this.num = num;
this.godown = godown;
}
@Override
public void run() {
// TODO Auto-generated method stub
godown.consume(num);
}
}
class Producer extends Thread{
private int num;
private GoDown godown;
public Producer(int num, GoDown godown) {
super();
this.num = num;
this.godown = godown;
}
@Override
public void run() {
// TODO Auto-generated method stub
godown.produce(num);
}
}