//生产者消费者模式 管程法
    public class TestPC {
    public static void main(String [] args){
    Huanchongqu hch=new Huanchongqu();
    Shengchanzhe scz=new Shengchanzhe(hch);
    Xiaofeizhe xfz=new Xiaofeizhe(hch);
    Xiaofeizhe xfz2=new Xiaofeizhe(hch);
    Thread t3=new Thread(xfz2);
    Thread t1=new Thread(scz);
    Thread t2=new Thread(xfz);
    t1.start();
    t2.start();
    t3.start();
    }
    }
    //生产者
    class Shengchanzhe implements Runnable{
    Huanchongqu hcq;

    1. public Shengchanzhe(Huanchongqu hcq) {<br /> this.hcq = hcq;<br /> }
    2. @Override<br /> public void run() {<br /> for(int i=0;i<200;i++){<br /> Chick chick=new Chick(i);<br /> hcq.push(chick);<br /> System._out_.println("生产了"+i+"只鸡");<br /> }
    3. }<br />}

    //消费者
    class Xiaofeizhe implements Runnable {
    Huanchongqu hcq;

    public Xiaofeizhe(Huanchongqu hcq) {<br />        this.hcq = hcq;<br />    }
    
    @Override<br />    public void run() {<br />        for (int i =0 ;i<100;i++){<br />            hcq.pop();<br />            System._out_.println("消费了"+i+"只鸡");<br />        }
    
    }<br />}<br />//商品<br />class Chick{<br />    int id;<br />    public Chick(int id) {<br />        this.id = id;<br />    }
    

    }

    //缓冲区
    class Huanchongqu{
    Chick [] hc=new Chick[10];
    int index =0;

    //生产者放入产品
    public synchronized void push(Chick chick){

        //容器满了等消费者消费<br />        System._out_.println("=================="+index);<br />        if(index==hc.length){<br />            try {<br />                //生产者等待且释放当前资源<br />                this.wait();<br />            } catch (InterruptedException e) {<br />                e.printStackTrace();<br />            }<br />        }<br />        //没有满丢入产品<br />        hc[index]=chick;<br />        index++;<br />        //可以通知消费者消费了
    
            //全部线程运行<br />            this.notifyAll();<br />            System._out_.println("生产"+index+"只鸡");<br />        }
    
    
    
    public synchronized Chick pop(){<br />        System._out_.println("++++++++++++++++++"+index);<br />        if(index==0){<br />            try {<br />                //线程等待且释放资源<br />                this.wait();<br />            } catch (InterruptedException e) {<br />                e.printStackTrace();<br />            }<br />        }<br />        index--;<br />        Chick chick=hc[index];<br />        //全部线程执行<br />        this.notifyAll();<br />        System._out_.println("消费"+index);<br />        return chick;<br />    }
    

    }