生产者和消费者问题

≯℡__Kan透↙ 提交于 2020-03-06 09:01:15
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);
        }
    }
    
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!