Java ArrayBlockingQueue

Bu eğiticide, ArrayBlockingQueue sınıfı ve yöntemleri hakkında örnekler yardımıyla bilgi edineceğiz.

ArrayBlockingQueueJava Koleksiyonları çerçevenin sınıf bir dizi kullanarak engelleme kuyruk uygulanmasını sağlar.

Java BlockingQueue arayüzünü uygular.

ArrayBlockingQueue Oluşturma

Bir dizi engelleme kuyruğu oluşturmak için java.util.concurrent.ArrayBlockingQueuepaketi içe aktarmalıyız .

Paketi içe aktardıktan sonra, Java'da bir dizi engelleme kuyruğunu şu şekilde oluşturabiliriz:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Buraya,

  • Tür - dizi engelleme kuyruğunun türü
  • kapasite - dizi engelleme kuyruğunun boyutu

Örneğin,

 // Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5); 

Not: Dizinin boyutunun belirtilmesi zorunludur.

ArrayBlockingQueue Yöntemleri

ArrayBlockingQueueSınıf tüm yöntemlerin uygulanmasını sağlar BlockingQueuearayüzüne.

Bu yöntemler, dizi engelleme kuyruklarından öğeleri eklemek, bunlara erişmek ve silmek için kullanılır.

Ayrıca, iki yöntem hakkında bilgi edineceğiz put()ve take()bu, dizi engelleme kuyruğundaki engelleme işlemini destekler.

Bu iki yöntem, dizi engelleme sırasını diğer tipik kuyruklardan ayırır.

Eleman Ekle

  • add()- Belirtilen öğeyi dizi engelleme kuyruğuna ekler. Kuyruk dolu ise bir istisna atar.
  • offer()- Belirtilen öğeyi dizi engelleme kuyruğuna ekler. falseKuyruk dolu ise geri döner .

Örneğin,

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

Çıktı

 ArrayBlockingQueue: (Köpek, Kedi, At) 

Erişim Öğeleri

  • peek()- Dizi engelleme sırasının önünden bir öğe döndürür. nullKuyruk boşsa geri döner .
  • iterator()- Dizi engelleme kuyruğundaki öğelere sıralı olarak erişmek için bir yineleyici nesnesi döndürür. Kuyruk boşsa bir istisna atar. Kullanmak için java.util.Iteratorpaketi ithal etmeliyiz .

Örneğin,

 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(", "); ) ) ) 

Çıktı

 ArrayBlockingQueue: (Dog, Cat, Horse) Erişilen Öğe: Dog ArrayBlockingQueue Öğeleri: Köpek, Kedi, At, 

Öğeleri Kaldır

  • remove()- Dizi engelleme kuyruğundan belirtilen bir öğeyi döndürür ve kaldırır. Kuyruk boşsa bir istisna atar.
  • poll()- Dizi engelleme kuyruğundan belirtilen bir öğeyi döndürür ve kaldırır. nullKuyruk boşsa geri döner .
  • clear() - Dizi engelleme kuyruğundan tüm öğeleri kaldırır.

Örneğin,

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

Çıktı

 ArrayBlockingQueue: (Köpek, Kedi, At) Kaldırılan Öğeler: remove () kullanma: Anket kullanan Köpek (): Kedi Güncellendi ArrayBlockingQueue: () 

put () ve take () Yöntemi

Çok iş parçacıklı işlemlerde, bir iş parçacığını başka bir iş parçacığı ile senkronize etmek için kullanabilir put()ve take()engelleyebiliriz. Bu yöntemler, başarıyla yürütülebilene kadar bekleyecektir.

put () yöntemi

Bir dizi engelleme kuyruğunun sonuna bir eleman eklemek için put()yöntemi kullanabiliriz .

Dizi engelleme kuyruğu doluysa, dizi engelleme kuyruğunda bir öğe eklemek için boşluk kalana kadar bekler.

Örneğin,

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

Çıktı

 ArrayBlockingQueue: (Köpek, Kedi) 

Burada put()yöntem InterruptedExceptionbeklerken kesintiye uğrarsa bir atabilir . Bu nedenle, onu bir try… catch bloğunun içine almalıyız.

take () Yöntemi

Dizi engelleme kuyruğunun önünden bir elemanı döndürmek ve kaldırmak için take()yöntemi kullanabiliriz .

Dizi engelleme kuyruğu boşsa, dizi engelleme kuyruğunda silinecek öğeler bulunana kadar bekler.

Örneğin,

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

Çıktı

 ArrayBlockingQueue: (Köpek, Kedi) Kaldırılan Öğe: Köpek 

Burada take()yöntem InterrupedExceptionbeklerken kesintiye uğrarsa bir atacaktır . Bu nedenle, onu bir try… catchbloğun içine almalıyız .

Diğer yöntemler. Diğer metodlar

Yöntemler Açıklamalar
contains(element) Belirtilen öğe için dizi engelleme kuyruğunu arar. Eleman bulunursa, dönmezse geri truedöner false.
size() Dizi engelleme kuyruğunun uzunluğunu döndürür.
toArray() Dizi engelleme kuyruğunu bir diziye dönüştürür ve onu döndürür.
toString() Dizi engelleme kuyruğunu dizeye dönüştürür

ArrayBlockingQueue neden kullanılmalı?

ArrayBlockingQueueKullandığı dahili depolamanın yanı diziler.

İş parçacığı açısından güvenli bir koleksiyon olarak kabul edilir . Bu nedenle, genellikle çok iş parçacıklı uygulamalarda kullanılır.

Diyelim ki, bir iş parçacığı kuyruğa öğeler ekliyor ve başka bir iş parçacığı kuyruktan öğeleri kaldırıyor.

Şimdi, eğer birinci evre ikinci evreden daha yavaşsa, dizi engelleme kuyruğu ikinci iş parçacığının ilk iş parçacığı işlemlerini tamamlayana kadar beklemesini sağlayabilir.

Ilginç makaleler...