Von wait/notify zu BlockingQueue
Handgeschriebene Producer-Consumer-Koordination durch BlockingQueue ersetzen.
Code-Vergleich
✕ Manual wait and notify
synchronized (queue) {
while (queue.isEmpty()) {
queue.wait();
}
Job job = queue.removeFirst();
process(job);
}
✓ BlockingQueue
BlockingQueue<Job> queue = new LinkedBlockingQueue<>(); Job job = queue.take(); process(job);
Problem mit diesem Code entdeckt? Sag uns Bescheid.
Warum der moderne Weg gewinnt
Sicherere Koordination
Die Queue übernimmt Sperren und Bedingungssignalisierung.
Klare Absicht
put() und take() drücken Producer-Consumer-Verhalten direkt aus.
Eingebaute Richtlinien
Wähle begrenzte Kapazität, Fairness, Timeouts oder nicht-blockierende Operationen.
Alter Ansatz
Manuelles wait und notify
Moderner Ansatz
BlockingQueue
Seit JDK
5
Schwierigkeitsgrad
Fortgeschritten
JDK-Unterstützung
Von wait/notify zu BlockingQueue
Verfügbar
Weitgehend verfügbar seit JDK 5 (2004)
Wie es funktioniert
Korrekter wait/notify-Code erfordert einen gemeinsamen Monitor, Bedingungsschleifen, passende Benachrichtigungen und sorgfältige Behandlung von Interrupts. BlockingQueue kapselt diese Regeln und bietet blockierende, zeitgesteuerte und nicht-blockierende Operationen für Producer-Consumer-Workflows. Aufrufe wie put() und take() bleiben unterbrechbar.
Zugehörige Dokumentation
Beweis