私は今、セマフォを持つカスタムブロッキングキューを実装しました。ブロッキングキューの実装
キューが空の場合、私のキューはセマフォによってブロックされていません。
は、ここに私の実装です:
package poolThread;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.Semaphore;
public class MyQueue<E> {
Semaphore s = new Semaphore(0, true);
private Queue<E> queue = new LinkedList<E>();
public boolean isEmpty(){
return this.queue.isEmpty();
}
public void enqueue(E e){
queue.add(e);
s.release();
}
public E dequeue(){
E e = null;
try {
s.acquire();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e = queue.remove();
return e;
}
}
あなたは私が私のコードに障害を見つけるのに役立つだろうか?
?あなたのキューが空の場合、これはブロックされます*。 –
スレッドプールを実装するためにこのブロックキューを使用していましたが、ブロックしないスレッドはほとんど実行しません。 – gil
私はArrayBlockingQueueのjava実装を代わりに使用して、動作しているかどうかを確認しました。動作しているので、問題は私のブロッキングキューインプリメンテーションにあると確信しています。 – gil