Kolejki wait/notify na BlockingQueue
Zastąp ręcznie napisaną koordynację producent-konsument za pomocą BlockingQueue.
Porównanie kodu
✕ 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ć.
Dlaczego nowoczesne podejście wygrywa
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
Wsparcie JDK
Kolejki wait/notify na BlockingQueue
Dostępne
Szeroko dostępne od JDK 5 (2004)
Jak to działa
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.
Powiązana dokumentacja
Dowód