public class ProducerConsumer{
public static void main(String[] args){
SyncStack ss = new SyncStack();
Producer p = new Producer(ss);
Consumer c = new Consumer(ss);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
class WoTou{
int id;
WoTou(int id){
this.id = id;
}
public String toString(){
return "WoTou:" + id;
}
}
class SyncStack{
int index = 0;
WoTou[] arrayWT = new WoTou[8];
public synchronized void push(WoTou wt){
while(index == arrayWT.length){
try{
this.wait();
} catch(InterruptedException e){
e.printStackTrace();
}
}
this.notify();
arrayWT[index] = wt;
index++;
}
public synchronized WoTou pop(){
while(index == 0){
try{
this.wait();
} catch(InterruptedException e){
e.printStackTrace();
}
}
this.notify();
index--;
return arrayWT[index];
}
}
class Producer implements Runnable{
SyncStack ss = null;
Producer(SyncStack ss){
this.ss = ss;
}
public void run(){
for(int i=0;i<20;i++){
WoTou wt = new WoTou(i);
ss.push(wt);
System.out.println("生产了" + wt);
}
}
}
class Consumer implements Runnable{
SyncStack ss = null;
Consumer(SyncStack ss){
this.ss = ss;
}
public void run(){
for(int i=0;i<20;i++){
WoTou wt = ss.pop();
System.out.println("消费了" + wt);
}
}
}