Antarmuka Java BlockingQueue

Dalam tutorial ini, kita akan belajar tentang antarmuka Java BlockingQueue dan metodenya.

The BlockingQueueantarmuka dari Jawa Collectionskerangka memperluas Queueantarmuka. Ini memungkinkan operasi apa pun menunggu hingga berhasil dilakukan.

Misalnya, jika kita ingin menghapus sebuah elemen dari antrian kosong, maka antrian pemblokiran memungkinkan operasi delete menunggu hingga antrian berisi beberapa elemen yang akan dihapus.

Kelas yang Menerapkan BlockingQueue

Karena BlockingQueuemerupakan antarmuka, kami tidak dapat menyediakan implementasi langsungnya.

Untuk menggunakan fungsionalitas BlockingQueue, kita perlu menggunakan kelas yang mengimplementasikannya.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Bagaimana cara menggunakan antrian pemblokiran?

Kita harus mengimpor java.util.concurrent.BlockingQueuepaket untuk digunakan BlockingQueue.

 // Array implementation of BlockingQueue BlockingQueue animal1 = new ArraryBlockingQueue(); // LinkedList implementation of BlockingQueue BlockingQueue animal2 = new LinkedBlockingQueue(); 

Di sini, kita telah membuat objek animal1 dan animal2 dari kelas ArrayBlockingQueuedan LinkedBlockingQueue, masing-masing. Objek-objek ini dapat menggunakan fungsionalitas BlockingQueueantarmuka.

Metode BlockingQueue

Berdasarkan apakah antrian penuh atau kosong, metode antrian pemblokiran dapat dibagi menjadi 3 kategori:

Metode yang memunculkan pengecualian

  • 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.

Metode yang mengembalikan beberapa nilai

  • offer()- Menyisipkan elemen yang ditentukan ke antrian pemblokiran di akhir antrian. Kembali falsejika antrian penuh.
  • peek()- Mengembalikan kepala antrian pemblokiran. Kembali nulljika antrian kosong.
  • poll()- Menghapus elemen dari antrian pemblokiran. Kembali nulljika antrian kosong.

Selengkapnya tentang offer () dan poll ()

The offer()dan poll()metode dapat digunakan dengan timeout. Artinya, kita dapat melewatkan satuan waktu sebagai parameter. Sebagai contoh,

 offer(value, 100, milliseconds) 

Sini,

  • nilai adalah elemen yang akan dimasukkan ke antrian
  • Dan kami telah menyetel waktu tunggu 100 milidetik

Ini berarti offer()metode tersebut akan mencoba memasukkan elemen ke antrian pemblokiran selama 100milidetik. Jika elemen tidak dapat disisipkan dalam 100 milidetik, metode akan kembali false.

Catatan: Alih-alih milliseconds, kita juga bisa menggunakan unit waktu ini: days, hours, minutes, seconds, microsecondsdan nanosecondsdalam offer()dan poll()metode.

Metode yang memblokir operasi

The BlockingQueuejuga menyediakan metode untuk memblokir operasi dan menunggu jika antrian penuh atau kosong.

  • put()- Menyisipkan elemen ke antrian pemblokiran. Jika antrian penuh, itu akan menunggu sampai antrian memiliki ruang untuk memasukkan elemen.
  • take()- Menghapus dan mengembalikan elemen dari antrian pemblokiran. Jika antrian kosong, itu akan menunggu sampai antrian memiliki elemen untuk dihapus.

Misalkan, kita ingin memasukkan elemen ke dalam antrian. Jika antrian penuh maka put()metode akan menunggu sampai antrian memiliki ruang untuk memasukkan elemen.

Begitu pula jika kita ingin menghapus elemen dari sebuah antrian. Jika antrian kosong maka take()metode akan menunggu sampai antrian berisi elemen untuk dihapus.

Implementasi BlockingQueue di ArrayBlockingQueue

 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 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) Elemen yang Dihapus: 2 

Untuk mempelajari lebih lanjut ArrayBlockingQueue, kunjungi Java ArrayBlockingQueue.

Mengapa BlockingQueue?

Di Java, BlockingQueuedianggap sebagai koleksi thread-safe . Itu karena dapat membantu dalam operasi multi-threading.

Misalkan satu utas memasukkan elemen ke antrian dan utas lain menghapus elemen dari antrian.

Sekarang, jika utas pertama berjalan lebih lambat, antrean pemblokiran dapat membuat utas kedua menunggu hingga utas pertama menyelesaikan operasinya.

Artikel yang menarik...