Apa itu BlockingQueue di Java dan bagaimana cara mengimplementasikannya?



Artikel tentang BlockingQueue in Java ini akan membantu Anda mempelajari tentang antarmuka BlockingQueue. Ini juga akan memberi Anda wawasan tentang metode dan penerapan praktisnya

sangat populer di kalangan pemrogram karena rangkaian lengkap fitur bawaannya. Seringkali Anda akan mendapatkan solusi khusus untuk masalah Anda bahkan sebelum masalah itu muncul. Bagian yang sangat berguna dan penting dari adalah antarmuka BlockingQueue di Java. Melalui media artikel ini, saya akan menyoroti BlockingQueue di Java dan metode untuk mengimplementasikannya.

cara mengurai xml di java

Di bawah ini adalah topik yang dibahas dalam artikel ini:





BlockingQueue Interface di Java

BlockingQueue di Java adalah antarmuka yang ditambahkan di Java 1.5 bersama dengan beberapa kelas Utilitas bersamaan lainnya seperti ConcurrentHashMap, CopyOnWriteArrrayList, dll. Antarmuka BlockingQueue dimiliki oleh java.util.concurrent paket .Antarmuka ini meningkatkan kontrol aliran dengan mengaktifkan pemblokiran, jika utas mencoba mengantrekan antrean kosong atau mengantre antrean penuh. Dalam kedua kasus, antarmuka ini berguna.Dalam istilah yang lebih sederhana, misalkan a mencoba menambahkan elemen ke antrian yang sudah penuh. Pada titik ini dalam program, BlockingQueue akan dipanggil yang akan memblokir utas tertentu sampai utas lain melepaskan antrian untuk memberi ruang. Hal ini dapat terjadi karena antrean elemen pembersihan seluruh antrean. Demikian pula, BlockingQueue akan dipanggil untuk memblokir utas mencoba untuk membatalkan antrian yang sudah kosong sampai beberapa utas lain menyisipkan atau menambahkan elemen ke kosong. antre .

Saat bekerja dengan antarmuka BlockingQueue di Java, Anda harus ingat bahwa itu tidak menerima nilai null. Jika Anda mencoba melakukannya, NullPointerException akan langsung muncul. Gambar di bawah ini menunjukkan cara kerja antarmuka BlockingQueue di Java.



BlockingQueue - BlockingQueue di Jawa - EdurekaIni antarmuka digunakan terutama antara Produsen-Konsumen karena Aman untuk Benang.Yang saya maksud adalah antarmuka BlockingQueue dapat digunakan untuk membuat antrian yang dapat dibagikan oleh produsen dan konsumen

Untuk bekerja dengan BlockingQueue di Java, pertama-tama, Anda harus terbiasa dengan tipenya. Izinkan saya memperkenalkan Anda kepada mereka di bagian selanjutnya dari artikel ini.

Jenis Konstruktor untuk BlockingQueue di Java

Ada dua jenis konstruktor untuk antarmuka BlockingQueue di Java:



  • Antrian Tak Berbatas: Untuk jenis antrian ini, kapasitasnya akan disetel ke Integer.MAX_VALUE. Antrean tanpa batas tidak akan pernah diblokir karena dapat tumbuh secara dinamis, setiap kali elemen dimasukkan ke dalamnya. Di bawah ini adalah sintaks untuk membuat antrian tak terbatas:
BlockingQueue bq = LinkedBlockingDeque baru ()
  • Antrian Terikat: Untuk jenis antrian ini, Anda harus meneruskan kapasitas antrian pada saat pembuatannya, yaitu sebagai file pembangun parameter. Setelah ukuran ditetapkan, itu tidak dapat diubah. Di bawah ini adalah sintaks untuk membuat antrian berbatas:
BlockingQueue bq = LinkedBlockingDeque baru (10)

Sekarang setelah Anda terbiasa dengan cara mengimplementasikan BlockingQueue di Java, izinkan saya mencantumkan beberapa metodenya.

Metode di BlockingQueue Interface

metode Deskripsi
boolean add (E e) Metode ini membantu memasukkan elemen yang ditentukan ke dalam antrian ini jika ada ruang di antrian yang lainmelemparIllegalStateException
boolean berisi (Objek o) Metode ini mengembalikan nilai true jika antrian berisi elemen yang ditentukan
int drainTo (Koleksi c) Metode ini akan menghapus semua elemen yang tersedia dari antrian dan menambahkannya ke koleksi yang ditentukan
int drainTo (Collection c, int maxElements) Metode ini akan menghapus sejumlah elemen yang tersedia dari antrian dan menambahkannya ke dalam yang ditentukan
penawaran booloean (E e) Metode ini akan memasukkan elemen yang ditentukan ke dalam antrian jika tidak penuh dan mengembalikan nilai true, jika tidak maka akan mengembalikan salah
penawaran boolean (E e, long timeout, unit TimeUnit) Metode ini akan memasukkan elemen yang ditentukan ke dalam antrian. Jika antrian penuh, itu akan menunggu hingga waktu tunggu yang ditentukan sampai ruang tersedia.
Polling E (waktu tunggu lama, unit TimeUnit) Metode ini membantu dalam mengambil dan menghapus kepala antrian. Jika antrian kosong, itu akan menunggu hingga waktu tunggu yang ditentukan untuk elemen tersedia
void put (E e) Metode ini akan memasukkan elemen yang ditentukan ke dalam antrian dengan menunggu ruang tersedia n jika antrian penuh
int tersisaCapacity () Metode ini membantu mengembalikan jumlah elemen tambahan yang idealnya dapat diterima antrean ini tanpa diblokir
boolean hapus (Objek o) Metode ini akan menghapus satu contoh dari elemen tertentu dari antrian hanya jika ada
E take () Metode ini akan membantu dalam mengambil dan menghapus kepala antrian dengan menunggu elemen tersedia, jika antrian kosong.

Implementasi BlockingQueue

Di sini saya akan menerapkan contoh sederhana BlockingQueue di Java di manaclass EduProducer akan menghasilkan data dan memasukkannya ke dalam file antre , secara bersamaan, kelas lain, EduConsumer akan menghapus data dari antrian yang sama.

Untuk ini saya akan membuat 3 kelas yaitu:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Sekarang mari buat setiap kelas ini satu per satu.

EduProducer.java

paket edureka import java.util.concurrent.BlockingQueue public class EduProducer mengimplementasikan Runnable {private final BlockingQueue queue @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } private void process () melempar InterruptedException {// Masukkan 10 int ke dalam Antrian untuk (int i = 0 i<10 i++) { System.out.println('[Producer] Add : ' + i) queue.put(i) System.out.println('[Producer] Queue's Remaining Capacity : ' + queue.remainingCapacity()) Thread.sleep(150) } } public EduProducer(BlockingQueue queue) { this.queue = queue } }

EduConsumer.java

paket edureka import java.util.concurrent.BlockingQueue public class EduConsumer mengimplementasikan Runnable {private final BlockingQueue queue @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Interrupt ()}} proses private void (Integer take) melempar InterruptedException {System.out.println ('[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (BlockingQueue queue) {this.queue = queue}}

EdurekaMain.java

paket edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue public class EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (queue)) .start () Thread baru (EduConsumer baru (antrian)). start ()}}

Setelah Anda selesai menulis kode, jalankan program untuk mendapatkan output di bawah ini:

[Produser] Tambahkan: 0 [Konsumen] Ambil: 0 Kapasitas Sisa Antrean [Produser] Tambah: 1 Kapasitas Sisa Antrean [Produser]: 9 [Produser] Tambah: 2 Kapasitas Sisa Antrian [Produser]: 8 [Produser ] Tambah: 3 Kapasitas Sisa Antrean [Produser]: 7 [Konsumen] Pengambilan: 1 [Produser] Tambah: 4 Kapasitas Sisa Antrean [Produser]: 7 [Produser] Tambah: 5 Kapasitas Sisa Antrian [Produser]: 6 [Produser] Tambah : 6 Kapasitas Sisa Antrean [Produser]: 5 [Konsumen] Ambil: 2 [Produser] Tambah: 7 [Produser] Kapasitas Sisa Antrian: 5 [Produser] Tambah: 8 [Produser] Kapasitas Sisa Antrian: 4 [Produser] Tambah: 9 Kapasitas Sisa Antrean [Produsen]: 3 [Konsumen] Ambil: 3 [Konsumen] Ambil: 4 [Konsumen] Ambil: 5 [Konsumen] Ambil: 6 [Konsumen] Ambil: 7 [Konsumen] Ambil: 8 [Konsumen] Ambil: 9

Hal ini membawa kita ke bagian akhir artikel ini tentang BlockingQueue di Java. Jika Anda ingin mempelajari Java lebih detail, Anda dapat merujuk ke demikian juga.

Sekarang setelah Anda memahami dasar-dasar BlockingQueue di Java, lihat oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus Pelatihan dan Sertifikasi Java J2EE dan SOA dari Edureka dirancang untuk pelajar dan profesional yang ingin menjadi Pengembang Java. Kursus ini dirancang untuk memberi Anda permulaan dalam Pemrograman Java dan melatih Anda untuk konsep Java inti dan lanjutan bersama dengan berbagai kerangka kerja Java seperti Hibernate & Spring.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar di “BlockingQueue in Java” dan kami akan menghubungi Anda kembali secepatnya.