java
Dalam tutorial ini, kita akan belajar tentang kelas LinkedBLockingQueue dan metodenya dengan bantuan contoh.
LinkedBlockingQueue
kelas Java Collections
framework menyediakan implementasi antrian pemblokiran menggunakan daftar tertaut.
Ini mengimplementasikan antarmuka Java BlockingQueue.
Untuk membuat antrian pemblokiran tertaut, kita harus mengimpor java.util.concurrent.LinkedBlockingQueue
paket.
Berikut ini cara membuat antrean pemblokiran tertaut di Java:
1. Tanpa kapasitas awal
LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>();
Di sini kapasitas awal default adalah 2 31 -1.
2. Dengan kapasitas awal
LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>(int capacity);
Di sini,
Misalnya,
// Creating String type LinkedBlockingQueue with size 5
LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);
// Creating Integer type LinkedBlockingQueue with size 5
LinkedBlockingQueue<Integer> age = new LinkedBlockingQueue<>(5);
Catatan: Tidak wajib untuk memberikan ukuran daftar tertaut.
LinkedBlockingQueue
class menyediakan implementasi semua metode di antarmuka BlockingQueue.
Metode ini digunakan untuk menyisipkan, mengakses, dan menghapus elemen dari antrean pemblokiran yang ditautkan.
Juga, kita akan belajar tentang dua metode put()
dan take()
yang mendukung operasi pemblokiran dalam antrean pemblokiran tertaut.
Kedua metode ini membedakan antrean pemblokiran tertaut dari antrean umum lainnya.
add()
- Menyisipkan elemen tertentu ke antrian pemblokiran yang ditautkan. Itu melempar pengecualian jika antrian penuh.offer()
- Menyisipkan elemen tertentu ke antrian pemblokiran yang ditautkan. Ia mengembalikan false
jika antrian sudah penuh.Misalnya,
import java.util.concurrent.LinkedBlockingQueue;
class Main {
public static void main(String[] args) {
LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);
// Using add()
animals.add("Dog");
animals.add("Cat");
// Using offer()
animals.offer("Horse");
System.out.println("LinkedBlockingQueue: " + animals);
}
}
Keluaran
LinkedBlockingQueue: [Dog, Cat, Horse]
peek()
- Mengembalikan elemen dari depan antrian pemblokiran yang ditautkan. Ia mengembalikan null
jika antrian kosong.iterator()
- Mengembalikan objek iterator untuk mengakses elemen secara berurutan dari antrian pemblokiran yang ditautkan. Itu melempar pengecualian jika antrian kosong. Kita harus mengimpor java.util.Iterator
paket untuk menggunakannya.Misalnya,
import java.util.concurrent.LinkedBlockingQueue;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);
// Add elements
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("LinkedBlockingQueue: " + animals);
// Using peek()
String element = animals.peek();
System.out.println("Accessed Element: " + element);
// Using iterator()
Iterator<String> iterate = animals.iterator();
System.out.print("LinkedBlockingQueue Elements: ");
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Keluaran
LinkedBlockingQueue: [Dog, Cat, Horse] Accessed Element: Dog LinkedBlockingQueue Elements: Dog, Cat, Horse,
remove()
- Mengembalikan dan menghapus elemen tertentu dari antrian pemblokiran yang ditautkan. Itu melempar pengecualian jika antrian kosong.poll()
- Mengembalikan dan menghapus elemen tertentu dari antrian pemblokiran yang ditautkan. Ia mengembalikan null
jika antrian kosong.clear()
- Menghapus semua elemen dari antrean pemblokiran yang ditautkan.Misalnya,
import java.util.concurrent.LinkedBlockingQueue;
class Main {
public static void main(String[] args) {
LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);
animals.add("Dog");
animals.add("Cat");
animals.add("Horse");
System.out.println("LinkedBlockingQueue " + 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 LinkedBlockingQueue " + animals);
}
}
Keluaran
LinkedBlockingQueue: [Dog, Cat, Horse] Removed Elements: Using remove(): Dog Using poll(): Cat Updated LinkedBlockingQueue: []
Dalam proses multithreading, kita dapat menggunakan put()
dan take()
untuk memblokir pengoperasian satu utas untuk menyinkronkannya dengan utas lainnya. Metode ini akan menunggu hingga berhasil dieksekusi.
Untuk menyisipkan elemen yang ditentukan ke akhir antrian pemblokiran yang ditautkan, kami menggunakan put()
metode.
Jika antrean pemblokiran tertaut penuh, ia akan menunggu hingga ada ruang dalam antrean pemblokiran tertaut untuk memasukkan elemen.
Misalnya,
import java.util.concurrent.LinkedBlockingQueue;
class Main {
public static void main(String[] args) {
LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);
try {
// Add elements to animals
animals.put("Dog");
animals.put("Cat");
System.out.println("LinkedBlockingQueue: " + animals);
}
catch(Exception e) {
System.out.println(e);
}
}
}
Keluaran
LinkedBlockingQueue: [Dog, Cat]
Di sini, put()
metode mungkin melempar InterruptedException
jika terganggu saat menunggu. Oleh karena itu, kita harus menyertakannya di dalam blok try..catch.
Untuk mengembalikan dan menghapus elemen dari depan antrian pemblokiran yang ditautkan, kita dapat menggunakan take()
metode.
Jika antrean pemblokiran tertaut kosong, ia akan menunggu hingga ada elemen dalam antrean pemblokiran tertaut yang akan dihapus.
Misalnya,
import java.util.concurrent.LinkedBlockingQueue;
class Main {
public static void main(String[] args) {
LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);
try {
//Add elements to animals
animals.put("Dog");
animals.put("Cat");
System.out.println("LinkedBlockingQueue: " + animals);
// Remove an element
String element = animals.take();
System.out.println("Removed Element: " + element);
System.out.println("New LinkedBlockingQueue: " + animals);
}
catch(Exception e) {
System.out.println(e);
}
}
}
Keluaran
LinkedBlockingQueue: [Dog, Cat] Removed Element: Dog New LinkedBlockingQueue: [Cat]
Di sini, take()
metode akan melempar InterrupedException
jika terganggu saat menunggu. Oleh karena itu, kita harus menyertakannya di dalam try...catch
blokir.
Metode | Deskripsi |
---|---|
contains(element) | Menelusuri antrean pemblokiran yang ditautkan untuk elemen yang ditentukan. Jika elemen ditemukan, ia mengembalikan true , jika tidak mengembalikan false . |
size() | Mengembalikan panjang antrian pemblokiran yang ditautkan. |
toArray() | Mengonversi antrean pemblokiran tertaut menjadi larik dan mengembalikan larik. |
toString() | Mengonversi antrean pemblokiran yang ditautkan menjadi string |
LinkedBlockingQueue
menggunakan daftar tertaut sebagai penyimpanan internalnya.
Ini dianggap sebagai aman untuk thread koleksi. 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 antrian pemblokiran yang ditautkan dapat membuat utas kedua menunggu hingga utas pertama menyelesaikan operasinya.
java
Antarmuka Deque Java Dalam tutorial ini, kita akan belajar tentang antarmuka Deque, cara menggunakannya, dan metodenya. Deque antarmuka kerangka koleksi Java menyediakan fungsionalitas antrian berujung ganda. Ini memperluas Queue antarmuka. Kerja Deque Dalam antrian biasa, elemen ditambahkan dar
Java LinkedList Dalam tutorial ini, kita akan belajar tentang Java LinkedList secara detail dengan bantuan contoh. LinkedList kelas kerangka koleksi Java menyediakan fungsionalitas struktur data daftar tertaut (daftar tertaut ganda). Setiap elemen dalam daftar tertaut dikenal sebagai simpul . In
Antrian Pemblokiran Java Dalam tutorial ini, kita akan belajar tentang antarmuka Java BlockingQueue dan metodenya. BlockingQueue antarmuka Java Collections framework memperluas Queue antarmuka. Ini memungkinkan operasi apa pun untuk menunggu hingga berhasil dilakukan. Misalnya, jika kita ingin me
Java ArrayBlockingQueue Dalam tutorial ini, kita akan belajar tentang kelas ArrayBlockingQueue dan metodenya dengan bantuan contoh. ArrayBlockingQueue class framework Java Collections menyediakan implementasi antrian pemblokiran menggunakan array. Ini mengimplementasikan antarmuka Java BlockingQu