生产者-消费者模型,基于LinkedList实现

package queue;
/**
 * 生产者-消费者模型
 * 基于LinkedList实现
 */
import java.util.LinkedList;
import java.util.List;

public class LinkedQueue<T> {
	private List<T> list = null;
	private int maxCount = Integer.MAX_VALUE;
	
	public LinkedQueue(){
		list = new LinkedList<T>();
	}
	
	public LinkedQueue(int maxSize){
		list = new LinkedList<T>();
		maxCount = maxSize;
	}
	
	public synchronized void product(T obj){ 
        while (list.size() >= maxCount) {
        	//System.out.println(Thread.currentThread().getName()+",队列已满,等待中....");  
            try {  
                this.wait();  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
        list.add(obj);
        this.notifyAll();  
        //System.out.println(Thread.currentThread().getName()+",正在生产...队列当前个数:"+list.size());
    }
	
	public synchronized T consume(){  
        while(list.size()==0){  
        	//System.out.println(Thread.currentThread().getName()+",队列为空,等待中...");
            try {  
                this.wait();  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
        T obj = list.remove(0);  
        this.notifyAll();  
        //System.out.println(Thread.currentThread().getName()+",正在消费...队列当前个数:"+list.size());  
        return obj;
    }
	
	public T peek() {
		T obj = null;
		try {
			obj = list.get(0);
		} catch (IndexOutOfBoundsException e) {
			return null;
		}
		return obj;
	}

	public int getMaxCount() {
		return maxCount;
	}
	
	public int size() {
		return list.size();
	}
	
}

你可能感兴趣的:(thread)