Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Java BlockingQueue: Antrian Thread-Safe dengan Operasi Pemblokiran

Java BlockingQueue

Panduan ini menjelajahi antarmuka Java BlockingQueue, implementasinya, kategori metode, dan penggunaan dalam dunia nyata.

Antarmuka BlockingQueue, bagian dari Java Collections framework, memperluas Queue dan menambahkannya dengan perilaku pemblokiran. Operasi seperti penyisipan dan penghapusan akan menunggu secara otomatis hingga kondisi queue memungkinkan tindakan tersebut.

Misalnya, mencoba menghapus elemen dari queue kosong akan memblokir thread pemanggil hingga item tersedia, memastikan koordinasi yang aman antara produser dan konsumen.


Implementasi Konkret

Karena BlockingQueue adalah antarmuka, kelas konkret menyediakan fungsionalitas asli:

Java BlockingQueue: Antrian Thread-Safe dengan Operasi Pemblokiran


Menggunakan BlockingQueue

Impor paket sebelum membuat instance:

import java.util.concurrent.BlockingQueue; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.LinkedBlockingQueue; 

Contoh instance:

// Array implementation of BlockingQueue BlockingQueue<String> animal1 = new ArrayBlockingQueue<>(10); // LinkedList implementation of BlockingQueue BlockingQueue<String> animal2 = new LinkedBlockingQueue<>(); 

Kedua objek mendukung semua metode yang didefinisikan oleh antarmuka BlockingQueue.


Kategori Metode

Metode BlockingQueue dikelompokkan berdasarkan reaksi mereka saat queue penuh atau kosong:

Metode yang Melempar Pengecualian

Metode dengan Nilai Kembali

Varian dengan Batas Waktu

Kedua offer dan poll mendukung timeout:

boolean success = queue.offer(item, 100, TimeUnit.MILLISECONDS); 

Dalam contoh ini, metode mencoba menyisipkan item selama hingga 100 milidetik, mengembalikan false jika operasi melebihi waktu. Satuan waktu yang didukung meliputi days, hours, minutes, seconds, milliseconds, microseconds, dan nanoseconds.

Metode Pemblokiran

Metode ini penting untuk pola produser-konsumen di mana thread harus disinkronkan tanpa busy-waiting.


Contoh ArrayBlockingQueue

import java.util.concurrent.BlockingQueue; import java.util.concurrent.ArrayBlockingQueue; public class Main { public static void main(String[] args) { // Create a bounded blocking queue with capacity 5 BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5); try { // Insert elements – will block if the queue becomes full numbers.put(2); numbers.put(1); numbers.put(3); System.out.println("BlockingQueue: " + numbers); // Remove an element – will block if the queue is empty int removedNumber = numbers.take(); System.out.println("Removed Number: " + removedNumber); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.err.println("Operation interrupted: " + e.getMessage()); } } } 

Output

BlockingQueue: [2, 1, 3] Removed Number: 2 

Untuk wawasan lebih dalam, konsultasikan dokumentasi Java resmi tentang ArrayBlockingQueue.


Mengapa Menggunakan BlockingQueue?

Keunggulan inti dari BlockingQueue adalah keamanan thread bawaan. Ia menghilangkan kebutuhan akan sinkronisasi eksplisit ketika banyak thread secara bersamaan memproduksi dan mengonsumsi data.

Pertimbangkan thread produser yang memasukkan item dengan kecepatan lebih lambat daripada thread konsumen yang menghapusnya. Tanpa perilaku pemblokiran, konsumen dapat melempar pengecualian atau berputar dalam loop busy-wait. Sebuah BlockingQueue secara otomatis menangguhkan konsumen hingga produser membuat data baru tersedia, dan sebaliknya.

Dengan memanfaatkan mekanisme pemblokiran bawaan ini, pengembang dapat membangun aplikasi konkuren yang kuat dan dapat diskalakan dengan kode boilerplate minimal.


---

java

  1. Menguasai Operator Java: Tipe, Sintaks, & Contoh Praktis
  2. Komentar Java: Tipe, Penggunaan, dan Best Practices
  3. Menguasai Java Enhanced For Loop: Sintaks, Contoh, dan Best Practices
  4. Menguasai String Java: Pembuatan, Metode, dan Best Practices
  5. Menguasai Antarmuka Java: Konsep, Implementasi, dan Praktik Terbaik
  6. Menguasai Kelas Dalam Anonim Java: Definisi, Sintaks, dan Contoh Praktis
  7. Menguasai Java Try-with-Resources: Manajemen Sumber Daya Otomatis Dijelaskan
  8. Anotasi Java Dijelaskan: Jenis, Penempatan, dan Contoh Praktis
  9. Pernyataan Java: Panduan Praktis untuk Mendeteksi Bug dan Memastikan Keandalan Kode
  10. Memahami Java Vector: Penggunaan, Fitur, dan Perbandingan dengan ArrayList