Java ArrayBlockingQueue

Dalam tutorial ini, kita akan belajar tentang kelas ArrayBlockingQueue dan metodenya dengan bantuan contoh.

The ArrayBlockingQueuekelas kerangka Java Collections menyediakan implementasi antrian memblokir menggunakan array.

Ini mengimplementasikan antarmuka Java BlockingQueue.

Membuat ArrayBlockingQueue

Untuk membuat antrian pemblokiran array, kita harus mengimpor java.util.concurrent.ArrayBlockingQueuepaket.

Setelah kami mengimpor paket, berikut adalah cara membuat antrian pemblokiran array di Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Sini,

  • Type - jenis antrian pemblokiran array
  • kapasitas - ukuran antrian pemblokiran array

Sebagai contoh,

 // Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5); 

Catatan: Ini wajib untuk memberikan ukuran array.

Metode ArrayBlockingQueue

The ArrayBlockingQueuekelas menyediakan implementasi dari semua metode dalam BlockingQueueantarmuka.

Metode ini digunakan untuk memasukkan, mengakses dan menghapus elemen dari antrian pemblokiran array.

Selain itu, kita akan belajar tentang dua metode put()dan take()yang mendukung operasi pemblokiran dalam antrian pemblokiran array.

Kedua metode ini membedakan antrian pemblokiran array dari antrian tipikal lainnya.

Sisipkan Elemen

  • add()- Menyisipkan elemen yang ditentukan ke antrian pemblokiran array. Itu melempar pengecualian jika antrian penuh.
  • offer()- Menyisipkan elemen yang ditentukan ke antrian pemblokiran array. Ia kembali falsejika antrian penuh.

Sebagai contoh,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals); ) ) 

Keluaran

 ArrayBlockingQueue: (Anjing, Kucing, Kuda) 

Elemen Akses

  • peek()- Mengembalikan elemen dari depan antrian pemblokiran array. Ia kembali nulljika antrian kosong.
  • iterator()- Mengembalikan objek iterator untuk mengakses elemen secara berurutan dari antrian pemblokiran array. Itu melempar pengecualian jika antrian kosong. Kita harus mengimpor java.util.Iteratorpaket untuk menggunakannya.

Sebagai contoh,

 import java.util.concurrent.ArrayBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("ArrayBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Keluaran

 ArrayBlockingQueue: (Dog, Cat, Horse) Accessed Element: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse, 

Hapus Elemen

  • remove()- Mengembalikan dan menghapus elemen tertentu dari antrian pemblokiran array. Itu melempar pengecualian jika antrian kosong.
  • poll()- Mengembalikan dan menghapus elemen tertentu dari antrian pemblokiran array. Ia kembali nulljika antrian kosong.
  • clear() - Menghapus semua elemen dari antrian pemblokiran array.

Sebagai contoh,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using remove() String element1 = animals.remove(); System.out.println("Removed Element:"); System.out.println("Using remove(): " + element1); // Using poll() String element2 = animals.poll(); System.out.println("Using poll(): " + element2); // Using clear() animals.clear(); System.out.println("Updated ArrayBlockingQueue: " + animals); ) ) 

Keluaran

 ArrayBlockingQueue: (Dog, Cat, Horse) Elemen yang Dihapus: Menggunakan remove (): Dog Using poll (): Cat Updated ArrayBlockingQueue: () 

put () dan take () Metode

Dalam proses multithreading, kita dapat menggunakan put()dan take()memblokir operasi satu utas untuk menyinkronkannya dengan utas lain. Metode ini akan menunggu hingga berhasil dijalankan.

put ()

Untuk menambahkan elemen ke akhir antrian pemblokiran array, kita dapat menggunakan put()metode ini.

Jika antrian pemblokiran array penuh, ia menunggu sampai ada ruang dalam antrian pemblokiran array untuk menambahkan elemen.

Sebagai contoh,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Keluaran

 ArrayBlockingQueue: (Anjing, Kucing) 

Di sini, put()metode mungkin melempar InterruptedExceptionjika terputus saat menunggu. Oleh karena itu, kita harus memasukkannya ke dalam blok try… catch.

take () Metode

Untuk mengembalikan dan menghapus elemen dari depan antrian pemblokiran array, kita dapat menggunakan take()metode ini.

Jika antrian pemblokiran array kosong, ia menunggu sampai ada elemen dalam antrian pemblokiran array yang akan dihapus.

Sebagai contoh,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Keluaran

 ArrayBlockingQueue: (Anjing, Kucing) Elemen yang Dihapus: Anjing 

Di sini, take()metode akan menampilkan InterrupedExceptionjika terputus saat menunggu. Oleh karena itu, kita harus memasukkannya ke dalam try… catchblok.

Metode Lain

Metode Deskripsi
contains(element) Mencari antrian pemblokiran array untuk elemen tertentu. Jika elemen ditemukan, ia akan kembali true, jika tidak ia akan kembali false.
size() Mengembalikan panjang antrian pemblokiran array.
toArray() Mengonversi antrian pemblokiran larik menjadi larik dan mengembalikannya.
toString() Mengonversi antrian pemblokiran larik menjadi string

Mengapa menggunakan ArrayBlockingQueue?

The ArrayBlockingQueuemenggunakan array sebagai penyimpanan internal.

Ini dianggap sebagai koleksi yang aman untuk benang . Oleh karena itu, umumnya digunakan dalam aplikasi multi-threading.

Misalkan, satu utas memasukkan elemen ke antrean dan utas lainnya menghapus elemen dari antrean.

Sekarang, jika utas pertama lebih lambat dari utas kedua, maka antrean pemblokiran larik dapat membuat utas kedua menunggu hingga utas pertama menyelesaikan operasinya.

Artikel yang menarik...