Ich habe gerade eine benutzerdefinierte blockierende Warteschlange mit einem Semaphor implementiert.blockieren Queue-Implementierung
aus einem Grund, den ich nicht finden kann, wird meine Warteschlange nicht vom Semaphor blockiert, wenn meine Warteschlange leer ist.
hier ist meine Umsetzung:
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;
}
}
könnten Sie mir helfen, den Fehler in meinem Code?
? Dies * blockiert *, wenn Ihre Warteschlange leer ist. –
es tut nur manchmal, ich habe diese blockierende Warteschlange verwendet, um einen Threadpool zu implementieren, und wenn ich einige Threads ausführen, blockiert es nicht. – gil
Ich habe auch die Java-Implementierung von ArrayBlockingQueue statt meiner verwendet, um zu überprüfen, ob es funktioniert und es funktioniert, also bin ich mir ziemlich sicher, dass das Problem in meiner blockierenden Queue-Implementierung ist. – gil