Concurrency Średniozaawansowany

Zastąp ręcznie napisaną koordynację producent-konsument za pomocą BlockingQueue.

✕ 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);
Widzisz problem z tym kodem? Daj nam znać.
🛡

Bezpieczniejsza koordynacja

Kolejka przejmuje blokowanie i sygnalizację warunków.

👁

Jasna intencja

put() i take() bezpośrednio wyrażają zachowanie producent-konsument.

🎛

Wbudowane zasady

Wybierz ograniczoną pojemność, sprawiedliwość, limity czasu lub operacje nieblokujące.

Stare podejście
Ręczne wait i notify
Nowoczesne podejście
BlockingQueue
Od JDK
5
Poziom trudności
Średniozaawansowany
Kolejki wait/notify na BlockingQueue
Dostępne

Szeroko dostępne od JDK 5 (2004)

Poprawny kod wait/notify wymaga wspólnego monitora, pętli warunkowych, dopasowanych powiadomień oraz starannej obsługi przerwań. BlockingQueue hermetyzuje te reguły i udostępnia operacje blokujące, z limitem czasu oraz nieblokujące dla przepływów producent-konsument. Wywołania takie jak put() i take() pozostają przerywalne.