wait/notify kuyruklarından BlockingQueue'ya
Elle yazılan üretici-tüketici koordinasyonunu BlockingQueue ile değiştirin.
Kod Karşılaştırması
✕ 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);
Bu kodda bir sorun mu gördünüz? Bize bildirin.
Modern yöntem neden daha iyi
Daha güvenli koordinasyon
Kuyruk kilitleme ve koşul sinyalleşmesini üstlenir.
Net amaç
put() ve take() üretici-tüketici davranışını doğrudan ifade eder.
Yerleşik politikalar
Sınırlı kapasite, adalet, zaman aşımı veya bloklamayan işlemler seçin.
Eski Yaklaşım
Manuel wait ve notify
Modern Yaklaşım
BlockingQueue
JDK'dan itibaren
5
Zorluk
Orta
JDK Desteği
wait/notify kuyruklarından BlockingQueue'ya
Mevcut
JDK 5'ten (2004) itibaren geniş çapta kullanılabilir
Nasıl çalışır
Doğru wait/notify kodu, paylaşılan bir monitör, koşul döngüleri, eşleşen bildirimler ve dikkatli kesme (interrupt) işleme gerektirir. BlockingQueue bu kuralları kapsüller ve üretici-tüketici iş akışları için bloklayan, zaman aşımlı ve bloklamayan işlemler sunar. put() ve take() gibi çağrılar kesilebilir olmaya devam eder.
İlgili Belgeler
Kanıt