Dalam tutorial ini, kita akan belajar mengenai kelas ArrayBlockingQueue dan kaedahnya dengan bantuan contoh.
The ArrayBlockingQueue
kelas 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.ArrayBlockingQueue
pakej.
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 ArrayBlockingQueue
kelas menyediakan pelaksanaan semua kaedah dalam BlockingQueue
antara 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 kembalifalse
sekiranya 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 kembalinull
sekiranya barisan kosong.iterator()
- Mengembalikan objek berulang untuk mengakses elemen secara berurutan dari barisan menyekat barisan. Ia membuang pengecualian sekiranya barisan kosong. Kita mesti mengimportjava.util.Iterator
pakej 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 kembalinull
sekiranya 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 InterruptedException
jika 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 InterrupedException
jika terganggu semasa menunggu. Oleh itu, kita mesti memasukkannya ke dalam try… catch
blok.
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 ArrayBlockingQueue
array 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.