//生产者消费者模式 管程法
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;
public Shengchanzhe(Huanchongqu hcq) {<br /> this.hcq = hcq;<br /> }
@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 /> }
}<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 /> }
}