用java实现生产者和消费者问题 .

package javaTest;


//测试类   
 public class ProCon{ 
   
	 public static void main(String[] args){  
		 SyncQueue queue = new SyncQueue();  
		 Consumer p = new Consumer(queue);  
		 Producer c = new Producer(queue);  
		   
		   
		 new Thread(p).start();  
		 new Thread(c).start();  
	 }  
 }  
 //生产者  
 class Producer implements Runnable{   
     private SyncQueue queue;  
     private int count = 0;
     public Producer(SyncQueue queue){  
    	 this.queue = queue;  
     }  
     public void run(){  
	     while(true){  
		     String product = "产品"+count;  
		     queue.put(product);  
		     count++;
		     System.out.println("生产了: "+product);  
		     try{  
		    	 Thread.sleep(2000);  
		     }catch(InterruptedException e){  
		    	 e.printStackTrace();  
		     }  
	    }  
     }  
 }  
//消费者    
 class Consumer implements Runnable{   
    private SyncQueue queue;  
   
    public Consumer(SyncQueue queue) {  
    this.queue = queue;  
     }  
      
    public void run(){  
	    while(true){  
	    	String product = queue.get();  
	    	System.out.println("消费了: "+product);  
	    	try{  
	    		Thread.sleep(2000);  
	    	}catch(InterruptedException e){  
	    		e.printStackTrace();  
	    	}  
	    }  
    }  
 }  
 //公共缓冲区 
 class SyncQueue{   
	private String[] queue = new String[10];  
    private int index = 0;  
    //生产者把产品放入队列
    public synchronized void put(String productor){ 
	    if(index == queue.length){  
	      try{  
	       wait();  
	      }catch(InterruptedException e){  
	        e.printStackTrace();  
	       }  
	    }		    
		queue[index] = productor;  
		index++;  
		//唤醒在此对象监视器上等待的消费者线程  
		notify(); 
    }  
    //消费者从队列中取出一个产品消费
    public synchronized String get(){     
	    if(index == 0){  
	    	try{  
	    		wait();  
		    }catch (InterruptedException e){  
		        e.printStackTrace();  
		    }  
	    }
		index--;  
		String product = queue[index]; 
		//唤醒在此对象监视器上等待的生产者线程
		notify();  
		return product;  
    }  

 }  

 

你可能感兴趣的:(java实现)