生産者-消費者モデル、LinkedListに基づいて実現

2010 ワード


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();
	}
	
}