Concurrency Fortgeschritten

Handgeschriebene Producer-Consumer-Koordination durch BlockingQueue ersetzen.

✕ 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.
🛡

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
Von wait/notify zu BlockingQueue
Verfügbar

Weitgehend verfügbar seit JDK 5 (2004)

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.