我剛剛實現了一個信號量的自定義阻塞隊列。阻塞隊列實現
由於我無法找到的原因,當我的隊列爲空時,我的隊列沒有被信號燈阻塞。
這裏是我的實現:
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