Dalam tutorial ini, kita akan belajar tentang kelas ArrayBlockingQueue dan metodenya dengan bantuan contoh.
The ArrayBlockingQueue
kelas 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.ArrayBlockingQueue
paket.
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 ArrayBlockingQueue
kelas menyediakan implementasi dari semua metode dalam BlockingQueue
antarmuka.
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 kembalifalse
jika 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 kembalinull
jika antrian kosong.iterator()
- Mengembalikan objek iterator untuk mengakses elemen secara berurutan dari antrian pemblokiran array. Itu melempar pengecualian jika antrian kosong. Kita harus mengimporjava.util.Iterator
paket 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 kembalinull
jika 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 InterruptedException
jika 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 InterrupedException
jika terputus saat menunggu. Oleh karena itu, kita harus memasukkannya ke dalam try… catch
blok.
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 ArrayBlockingQueue
menggunakan 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.