生産者-消費者モデル、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();
}
}