Java'da Thread-Safe BlockingQueue nedir? Ne zaman kullanmalısın? Uygulama Eklendi

Yayınlanan: 2021-04-30
Java'da Threadsafe BlockingQueue nedir ve ne zaman kullanmanız gerekir?

Şimdiye kadar Crunchify'da Üretici Tüketici konsepti üzerine iki makale yazdım. Birincisi Java Semaphore ve Mutex'i açıklar ve ikincisi Eşzamanlı Okuma/Yazmayı açıklar.

Bu Java BlockingQueue in Java açıklamak için aynı Üretici/Tüketici konseptini inceleyeceğiz.

Java'da Engelleme Sırasının avantajları nelerdir?

Bir java.util.Queue , bir öğe alınırken sıranın boş olmamasını ve bir öğe depolanırken kuyrukta boş alanın olmasını bekleyen işlemleri destekler.

java'da java.util.BlockingQueue - Crunchify

Dört Java Sınıfı oluşturmamız gerekiyor:

  1. Mesaj koymak ve almak için CrunchifyMessage.java
  2. Mesajı kuyruğa almak için CrunchifyBlockingProducer.java
  3. Sıradan mesaj almak için CrunchifyBlockingConsumer.java
  4. Testi başlatmak için CrunchifyBlockingMain.java

BlockingQueue uygulamaları thread-safe . Tüm kuyruğa alma yöntemleri, doğası gereği atomiktir ve dahili kilitler kullanır.

Java'da Thread-Safe BlockingQueue uygulamasına başlayalım

Aşama 1

CrunchifyMessage.java sınıfını oluşturun. Bu basit Java Nesnesidir.

Adım 2

Basit msg oluşturan ve kuyruğa koyan yapımcı CrunchifyBlockingProducer.java oluşturun.

Aşama 3

Kuyruktan gelen mesajı tüketen CrunchifyBlockingConsumer.java sınıfını oluşturun.

4. Adım

BlockingQueue testini çalıştıran basit CrunchifyBlockingMain.java yöntemi oluşturun. BlockingQueue davranışını kontrol etmek için bu programı çalıştırın.

BlockingQueue boş öğeleri kabul etmez. Uygulamalar, bir null ekleme , koyma veya sunma girişimlerinde NullPointerException oluşturur.

Yoklama işlemlerinin başarısızlığını belirtmek için bir sentinel değeri olarak bir boş değer kullanılır.

Sonuç:

Java.util.concurrent.BlockingQueue'yu ne zaman kullanmalıyız?

  • Bir tür gelen isteği kısmak istediğinizde, aynısını kullanmalısınız.
  • Bir üretici sınırsız bir kuyrukla tüketicilerin çok önüne geçebilir. Tüketici üreticiye yetişemezse, bu bir OutOfMemoryError neden olabilir. Bu gibi durumlarda, olası bir üreticiye kuyruğun dolduğunu bildirmek ve bir arıza ile çabucak pes etmek daha iyi olabilir.
    • Başka bir deyişle: üreticiler doğal olarak kısılır.
  • Engelleme Sırası normalde eşzamanlı uygulamada kullanılır
  • Doğru, iş parçacığı için güvenli bir uygulama sağlar
  • Bellek tüketimi de sınırlı olmalıdır