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 menghapus sebuah elemen dari antrian kosong, maka antrian pemblokiran memungkinkan operasi penghapusan untuk menunggu sampai antrian berisi beberapa elemen yang akan dihapus.
Sejak BlockingQueue
adalah antarmuka, kami tidak dapat menyediakan implementasi langsungnya.
Untuk menggunakan fungsi BlockingQueue
, kita perlu menggunakan kelas yang mengimplementasikannya.
Kita harus mengimpor java.util.concurrent.BlockingQueue
paket untuk menggunakan BlockingQueue
.
// Array implementation of BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();
// LinkedList implementation of BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();
Di sini, kita telah membuat objek animal1 dan animal2 kelas ArrayBlockingQueue
dan LinkedBlockingQueue
, masing-masing. Objek ini dapat menggunakan fungsi BlockingQueue
antarmuka.
Berdasarkan apakah antrian penuh atau kosong, metode antrian pemblokiran dapat dibagi menjadi 3 kategori:
add()
- Menyisipkan elemen ke antrian pemblokiran di akhir antrian. Melempar pengecualian jika antrian penuh.element()
- Mengembalikan kepala antrian pemblokiran. Melempar pengecualian jika antrian kosong.remove()
- Menghapus elemen dari antrian pemblokiran. Melempar pengecualian jika antrian kosong.offer()
- Menyisipkan elemen yang ditentukan ke antrian pemblokiran di akhir antrian. Mengembalikan false
jika antrian sudah penuh.peek()
- Mengembalikan kepala antrian pemblokiran. Mengembalikan null
jika antrian kosong.poll()
- Menghapus elemen dari antrian pemblokiran. Mengembalikan null
jika antrian kosong.Lebih banyak penawaran() dan poll()
offer()
dan poll()
metode dapat digunakan dengan timeout. Artinya, kita dapat melewatkan satuan waktu sebagai parameter. Misalnya,
offer(value, 100, milliseconds)
Di sini,
Ini berarti offer()
metode akan mencoba memasukkan elemen ke antrian pemblokiran untuk 100
milidetik. Jika elemen tidak dapat dimasukkan dalam 100 milidetik, metode mengembalikan false
.
Catatan: Alih-alih milliseconds
, kita juga dapat menggunakan satuan waktu berikut:days
, hours
, minutes
, seconds
, microseconds
dan nanoseconds
di offer()
dan poll()
metode.
BlockingQueue
juga menyediakan metode untuk memblokir operasi dan menunggu apakah antrian penuh atau kosong.
put()
- Menyisipkan elemen ke antrian pemblokiran. Jika antrian penuh, antrian akan menunggu sampai antrian memiliki ruang untuk menyisipkan elemen.take()
- Menghapus dan mengembalikan elemen dari antrian pemblokiran. Jika antrian kosong, akan menunggu sampai antrian memiliki elemen yang akan dihapus.
Misalkan, kita ingin memasukkan elemen ke dalam antrian. Jika antrian sudah penuh maka put()
metode akan menunggu sampai antrian memiliki ruang untuk menyisipkan elemen.
Demikian pula jika kita ingin menghapus elemen dari antrian. Jika antrian kosong maka take()
metode akan menunggu sampai antrian berisi elemen yang akan dihapus.
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
class Main {
public static void main(String[] args) {
// Create a blocking queue using the ArrayBlockingQueue
BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5);
try {
// Insert element to blocking queue
numbers.put(2);
numbers.put(1);
numbers.put(3);
System.out.println("BLockingQueue: " + numbers);
// Remove Elements from blocking queue
int removedNumber = numbers.take();
System.out.println("Removed Number: " + removedNumber);
}
catch(Exception e) {
e.getStackTrace();
}
}
}
Keluaran
BlockingQueue: [2, 1, 3] Removed Element: 2
Untuk mempelajari lebih lanjut tentang ArrayBlockingQueue
, kunjungi Java ArrayBlockingQueue.
Di Jawa, BlockingQueue
dianggap sebagai aman untuk thread koleksi. Ini karena dapat membantu dalam operasi multi-threading.
Misalkan satu utas memasukkan elemen ke antrean dan utas lainnya menghapus elemen dari antrean.
Sekarang, jika utas pertama berjalan lebih lambat, maka antrian pemblokiran 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
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
Java LinkedBlockingQueue 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 Jav