生产者消费者问题

volidate使用方法 参考文档html

描述: 声明一个Plate对象为plate,被线程A和线程B共享,A专门放鸡蛋,B专门拿鸡蛋。假设 开始,A调用plate.putEgg方法,此时eggs.size()为0,所以顺利将鸡蛋放到盘子,还执行了notify()方法,唤醒锁的阻塞队列的线程,此时阻塞队列尚未线程。java

又有一个A线程对象调用plate.putEgg方法,此时eggs.size()不为0,调用wait()方法,本身进入了锁对象的阻塞队列。测试

此时,来了一个B线程对象,调用plate.getEgg方法,eggs.size()不为0,顺利的拿到了一个鸡蛋,还执行了notify()方法,唤醒锁的阻塞队列的线程,此时阻塞队列有一个A线程对象,唤醒后,它进入到就绪队列,就绪队列也就它一个,所以立刻获得锁,开始往盘子里放鸡蛋,此时盘子是空的,所以放鸡蛋成功。线程

假设接着来了线程A,就重复2;假设来料线程B,就重复3。code

整个过程都保证了放鸡蛋,拿鸡蛋,放鸡蛋,拿鸡蛋。htm

package thread;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @author sb
 *
 */
public class Plate{
	  List<Object> eggs=new ArrayList<Object>();  
	  public synchronized  Object getEgg(){
	     if(eggs.size()==0){  
	        try{  
	            wait();   //这里放弃了同步锁,好不容易获得,又放弃了  
	        }catch(InterruptedException e){  
	        }  
	     }  
	  
	    Object egg=eggs.get(0); 
	    System.out.println("取鸡蛋");
	    eggs.clear();//清空盘子  
	    notify();//唤醒阻塞队列的某线程到就绪队列  
	    return egg;  
	}  
	  
	 public synchronized  void putEgg(Object egg){
	   if(eggs.size()>0){  
	      try{  
	         wait();  //这里放弃了同步锁,好不容易获得,又放弃了  
	      }catch(InterruptedException e){  
	      }  
	    }  
	    eggs.add(egg);//往盘子里放鸡蛋
	    System.out.println("放鸡蛋");
	    notify();//唤醒阻塞队列的某线程到就绪队列  
	  }  
}

测试:对象

package thread;

public class PlateTest {
    public static void main(String[] args) {
		Plate  plate = new Plate();
		
		for(int i =0 ; i<100;i++){
			plate.putEgg("a");
			plate.getEgg();
		}
	}
}

测试输出结果:blog

放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
放鸡蛋
取鸡蛋
相关文章
相关标签/搜索