Antara muka Java BlockingQueue

Dalam tutorial ini, kita akan belajar mengenai antara muka Java BlockingQueue dan kaedahnya.

Antara BlockingQueuemuka Collectionskerangka Java memperluas Queueantara muka. Ia membolehkan sebarang operasi menunggu sehingga berjaya dilaksanakan.

Sebagai contoh, jika kita ingin menghapus elemen dari barisan kosong, maka barisan penyekat membolehkan operasi hapus menunggu sehingga barisan mengandungi beberapa elemen yang akan dihapus.

Kelas yang Melaksanakan BlockingQueue

Oleh kerana BlockingQueuemerupakan antara muka, kami tidak dapat memberikan pelaksanaannya secara langsung.

Untuk menggunakan fungsi BlockingQueue, kita perlu menggunakan kelas yang melaksanakannya.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Bagaimana menggunakan barisan penyekat?

Kita mesti mengimport java.util.concurrent.BlockingQueuepakej untuk digunakan BlockingQueue.

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

Di sini, kami telah membuat objek animal1 dan animal2 kelas ArrayBlockingQueuedan LinkedBlockingQueue, masing-masing. Objek-objek ini dapat menggunakan fungsi BlockingQueueantara muka.

Kaedah BlockingQueue

Berdasarkan sama ada giliran penuh atau kosong, kaedah menyekat barisan boleh dibahagikan kepada 3 kategori:

Kaedah yang membuang pengecualian

  • add()- Memasukkan elemen ke barisan penyekat di akhir barisan. Melontarkan pengecualian sekiranya barisan penuh.
  • element()- Mengembalikan kepala barisan penyekat. Melontarkan pengecualian sekiranya barisan kosong.
  • remove()- Mengeluarkan elemen dari barisan penyekat. Melontarkan pengecualian sekiranya barisan kosong.

Kaedah yang mengembalikan beberapa nilai

  • offer()- Memasukkan elemen yang ditentukan ke barisan penyekat pada akhir barisan. Kembali falsesekiranya barisan penuh.
  • peek()- Mengembalikan kepala barisan penyekat. Kembali nulljika barisan kosong.
  • poll()- Mengeluarkan elemen dari barisan penyekat. Kembali nulljika barisan kosong.

Lebih banyak ditawarkan () dan tinjauan pendapat ()

Yang offer()dan poll()kaedah boleh digunakan dengan tamat masa. Artinya, kita dapat melewati unit waktu sebagai parameter. Sebagai contoh,

 offer(value, 100, milliseconds) 

Di sini,

  • nilai adalah elemen yang akan dimasukkan ke dalam barisan
  • Dan kami telah menetapkan masa tamat 100 milisaat

Ini bermaksud offer()kaedah akan cuba memasukkan elemen ke dalam barisan penyekat untuk 100milisaat. Sekiranya elemen tidak dapat dimasukkan dalam 100 milisaat, kaedah akan kembali false.

Nota: Daripada milliseconds, kita juga boleh menggunakan unit masa: days, hours, minutes, seconds, microsecondsdan nanosecondsdalam offer()dan poll()kaedah.

Kaedah yang menyekat operasi

Ini BlockingQueuejuga menyediakan kaedah untuk menyekat operasi dan menunggu jika barisan penuh atau kosong.

  • put()- Memasukkan elemen ke dalam barisan penyekat. Sekiranya barisan penuh, ia akan menunggu sehingga barisan mempunyai ruang untuk memasukkan elemen.
  • take()- Mengeluarkan dan mengembalikan elemen dari barisan penyekat. Sekiranya barisan kosong, ia akan menunggu sehingga barisan mempunyai elemen yang akan dihapuskan.

Katakan, kami ingin memasukkan elemen ke dalam barisan. Sekiranya barisan penuh maka put()kaedah akan menunggu sehingga barisan mempunyai ruang untuk memasukkan elemen.

Begitu juga, jika kita mahu memadamkan elemen dari barisan. Sekiranya barisan kosong maka take()kaedah akan menunggu sehingga barisan mengandungi elemen yang akan dihapuskan.

Pelaksanaan 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(); ) ) ) 

Pengeluaran

 BlockingQueue: (2, 1, 3) Elemen yang Dihapus: 2 

Untuk mengetahui lebih lanjut mengenai ArrayBlockingQueue, kunjungi Java ArrayBlockingQueue.

Mengapa BlockingQueue?

Di Jawa, BlockingQueuedianggap sebagai koleksi benang yang selamat . Ini kerana ia dapat membantu dalam operasi multi-threading.

Katakan satu utas memasukkan elemen ke dalam barisan dan satu lagi benang mengeluarkan unsur dari barisan.

Sekarang, jika utas pertama berjalan lebih perlahan, barisan penyekat dapat membuat utas kedua menunggu sehingga utas pertama menyelesaikan operasinya.

Artikel menarik...