`
yxpjx01
  • 浏览: 2950 次
社区版块
存档分类
最新评论

java 多线程-生产消费者者模式

    博客分类:
  • java
 
阅读更多
独立写了一个生产消费者的模式,加强理解多线程编程及线程间的同步及信息交换。
要点:
1、在启动线程时,先需启动生产者。
2、生产者生产满了后,就不能再生产,进入等待状态,直到有消费者进行消费。
3、消费者进行消费时,若没有,则不能进行消费,进入等待状态。直到生产者生产了。

public class TestProduct {
public static void main(String[] args){
final Product pro = new Product();
ExecutorService service = Executors.newCachedThreadPool();
for(int j=0; j<2; j++){
new Thread(){
public void run()
{
pro.putEgg();
//pro.getEgg();

};

}.start();
for(int i=0; i<2; i++){
new Thread(){
public void run()
{
pro.getEgg();
//pro.putEgg();

};

}.start();
}
}
}

}



public class Product {

private boolean flag = true;// true:盘中没有鸡蛋,false 盘中有鸡蛋
//盘中有鸡蛋则唤醒其它的线程可以来取了,盘中无鸡蛋,则此于等待状态,等着来放鸡蛋。

//放鸡蛋
public synchronized void putEgg(){
//如果盘中没有鸡蛋
if(flag){
   flag = false;
   System.out.println(Thread.currentThread().getName()+"  盘中放入了一个鸡蛋了,可以取鸡蛋了");
   try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
  
}
notify();


}
//取鸡蛋

public synchronized String getEgg()
{
//如果有鸡蛋,则取出鸡蛋
String jidan;
if(!flag)
{
System.out.println(Thread.currentThread().getName()+"  已经取出来一个鸡蛋了");
flag = true;
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
notify();
return null;
}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics