Java 7 ConcurrentLinkedQueue に関して次の質問があります。次のクラスがあるとします。
public class Blah {
private ConcurrentLinkedQueue<String> queue;
public Blah() {
queue = new ConcurrentLinkedQueue<String>();
}
public void produce(String action, String task) throws InterruptedException {
synchronized(queue) {
while(queue.size() >= 8)
queue.wait();
queue.add(action + "#" + task);
queue.notifyAll();
}
}
public void consume() throws InterruptedException {
synchronized(queue) {
while(queue.size() <= 0)
queue.wait();
String element = queue.poll();
StringTokenizer strTok = new StringTokenizer(element, "#");
String action = strTok.nextToken();
String task = strTok.nextToken();
/**
* Operate on request
*/
queue.notifyAll();
}
}
}
生成および消費関数は、リストのスレッドを生成/リストから削除するために、並行スレッドによって呼び出されます。キュー内の要素の追加/削除をシリアル化するために、以前の関数 consumer() および Produce() を実装します。上記は必須ですか、それとも ConcurrentLinkedQueue が処理しますか? コードのパフォーマンスを低下させたくないので、質問しています。
ありがとう、ニック