Apa itu Thread-Safe BlockingQueue di Java? Kapan Anda harus menggunakannya? Implementasi Terlampir

Diterbitkan: 2021-04-30
Apa itu Threadsafe BlockingQueue di Java dan kapan Anda harus menggunakannya

Sejauh ini saya sudah menulis dua artikel tentang konsep Producer Consumer di Crunchify. Yang pertama untuk menjelaskan Java Semaphore dan Mutex dan yang kedua untuk menjelaskan Baca/Tulis Bersamaan.

Dalam Tutorial Java ini kita akan membahas konsep Producer/Consumer yang sama untuk menjelaskan BlockingQueue in Java .

Apa keuntungan dari Memblokir Antrian di Jawa?

java.util.Queue mendukung operasi yang menunggu antrian menjadi tidak kosong saat mengambil elemen, dan menunggu ruang tersedia dalam antrian saat menyimpan elemen.

java.util.BlockingQueue di java - Crunchify

Kita perlu membuat empat Kelas Java:

  1. CrunchifyMessage.java untuk menempatkan dan menerima pesan
  2. CrunchifyBlockingProducer.java untuk memasukkan pesan ke dalam antrian
  3. CrunchifyBlockingConsumer.java untuk mendapatkan pesan dari antrian
  4. CrunchifyBlockingMain.java untuk memulai pengujian

Implementasi BlockingQueue adalah thread-safe . Semua metode antrian bersifat atomik dan menggunakan kunci internal.

Mari kita mulai implementasi Thread-Safe BlockingQueue di Java

Langkah 1

Buat kelas CrunchifyMessage.java . Ini adalah Objek Java sederhana.

Langkah 2

Buat produser CrunchifyBlockingProducer.java yang membuat pesan sederhana dan memasukkannya ke dalam antrian.

Langkah-3

Buat kelas CrunchifyBlockingConsumer.java yang menggunakan pesan dari antrian.

Langkah-4

Buat metode CrunchifyBlockingMain.java sederhana yang menjalankan tes BlockingQueue. Jalankan program ini untuk memeriksa perilaku BlockingQueue.

BlockingQueue tidak menerima elemen null . Implementasi melempar NullPointerException pada upaya untuk menambahkan , menempatkan atau menawarkan null .

Sebuah null digunakan sebagai nilai sentinel untuk menunjukkan kegagalan operasi polling .

Hasil:

Kapan kita harus menggunakan java.util.concurrent.BlockingQueue?

  • Ketika Anda ingin mencekik semacam permintaan yang masuk maka Anda harus menggunakan yang sama
  • Seorang produsen dapat berada jauh di depan konsumen dengan antrian yang tidak terbatas. Jika konsumen tidak mengejar produsen maka dapat menyebabkan OutOfMemoryError . Dalam situasi seperti ini, mungkin lebih baik untuk memberi sinyal kepada calon produsen bahwa antrian sudah penuh, dan cepat menyerah jika gagal.
    • Dengan kata lain: para produsen secara alami tercekik.
  • Antrian Pemblokiran biasanya digunakan dalam aplikasi bersamaan
  • Ini memberikan implementasi thread-safe yang benar
  • Konsumsi memori juga harus dibatasi