Java ArrayBlockingQueue

Dalam tutorial ini, kita akan belajar mengenai kelas ArrayBlockingQueue dan kaedahnya dengan bantuan contoh.

The ArrayBlockingQueuekelas rangka Collections Java menyediakan pelaksanaan barisan menyekat menggunakan array.

Ia menerapkan antara muka Java BlockingQueue.

Membuat ArrayBlockingQueue

Untuk membuat barisan menyekat barisan, kita mesti mengimport java.util.concurrent.ArrayBlockingQueuepakej.

Sebaik sahaja kami mengimport pakej, berikut adalah bagaimana kita dapat membuat barisan penyekat barisan di Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Di sini,

  • Jenis - jenis barisan menyekat array
  • kapasiti - ukuran barisan menyekat barisan

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: Wajib memberikan ukuran array.

Kaedah ArrayBlockingQueue

The ArrayBlockingQueuekelas menyediakan pelaksanaan semua kaedah dalam BlockingQueueantara muka.

Kaedah ini digunakan untuk memasukkan, mengakses dan menghapus elemen dari barisan penyekat barisan.

Juga, kita akan belajar mengenai dua kaedah put()dan take()yang menyokong operasi penyekat dalam barisan penyekat array.

Kedua kaedah ini membezakan barisan menyekat barisan daripada barisan khas yang lain.

Masukkan Elemen

  • add()- Memasukkan elemen yang ditentukan ke barisan penyekat array. Ia melontarkan pengecualian sekiranya barisan penuh.
  • offer()- Memasukkan elemen yang ditentukan ke barisan penyekat array. Ia kembali falsesekiranya barisan 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); ) ) 

Pengeluaran

 ArrayBlockingQueue: (Anjing, Kucing, Kuda) 

Elemen Akses

  • peek()- Mengembalikan elemen dari bahagian depan barisan menyekat barisan. Ia kembali nullsekiranya barisan kosong.
  • iterator()- Mengembalikan objek berulang untuk mengakses elemen secara berurutan dari barisan menyekat barisan. Ia membuang pengecualian sekiranya barisan kosong. Kita mesti mengimport java.util.Iteratorpakej 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(", "); ) ) ) 

Pengeluaran

 ArrayBlockingQueue: (Anjing, Kucing, Kuda) Elemen Diakses: Elemen AnjingBlockingElemen Antrian: Anjing, Kucing, Kuda, 

Buang Elemen

  • remove()- Mengembalikan dan membuang elemen yang ditentukan dari barisan penyekat barisan. Ia membuang pengecualian sekiranya barisan kosong.
  • poll()- Mengembalikan dan membuang elemen yang ditentukan dari barisan menyekat barisan. Ia kembali nullsekiranya barisan kosong.
  • clear() - Mengeluarkan semua elemen dari barisan menyekat barisan.

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); ) ) 

Pengeluaran

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

letakkan () dan ambil () Kaedah

Dalam proses multithreading, kita dapat menggunakan put()dan take()untuk menyekat operasi satu utas untuk menyegerakkannya dengan utas yang lain. Kaedah ini akan menunggu sehingga berjaya dilaksanakan.

kaedah put ()

Untuk menambahkan elemen ke hujung barisan penyekat array, kita boleh menggunakan put()kaedahnya.

Sekiranya barisan menyekat array penuh, ia menunggu sehingga ada ruang dalam barisan penyekat 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); ) ) ) 

Pengeluaran

 ArrayBlockingQueue: (Anjing, Kucing) 

Di sini, put()kaedah boleh membuang InterruptedExceptionjika terganggu semasa menunggu. Oleh itu, kita mesti memasukkannya ke dalam blok cobaan … tangkapan.

ambil () Kaedah

Untuk mengembalikan dan mengeluarkan elemen dari bahagian depan barisan penyekat barisan, kita boleh menggunakan take()kaedahnya.

Sekiranya barisan penyekat array kosong, ia menunggu sehingga terdapat unsur-unsur dalam barisan penyekat array yang akan dihapuskan.

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); ) ) ) 

Pengeluaran

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

Di sini, take()kaedah akan membuang InterrupedExceptionjika terganggu semasa menunggu. Oleh itu, kita mesti memasukkannya ke dalam try… catchblok.

Kaedah lain

Kaedah Penerangan
contains(element) Mencari barisan penyekat array untuk elemen yang ditentukan. Sekiranya elemen itu dijumpai, ia akan kembali true, jika tidak, ia akan kembali false.
size() Mengembalikan panjang barisan penyekat array.
toArray() Menukar barisan penyekat array ke array dan mengembalikannya.
toString() Menukar barisan penyekat array menjadi rentetan

Mengapa menggunakan ArrayBlockingQueue?

Penggunaan ArrayBlockingQueuearray sebagai simpanan dalamannya.

Ia dianggap sebagai koleksi benang yang selamat . Oleh itu, ia biasanya digunakan dalam aplikasi multi-threading.

Katakan, satu utas memasukkan elemen ke dalam barisan dan satu lagi benang mengeluarkan unsur dari barisan.

Sekarang, jika utas pertama lebih lambat daripada utas kedua, maka barisan penyekat susunan dapat membuat utas kedua menunggu sehingga utas pertama menyelesaikan operasinya.

Artikel menarik...