Bu eğiticide, ArrayBlockingQueue sınıfı ve yöntemleri hakkında örnekler yardımıyla bilgi edineceğiz.
ArrayBlockingQueue
Java 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.ArrayBlockingQueue
paketi 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
ArrayBlockingQueue
Sınıf tüm yöntemlerin uygulanmasını sağlar BlockingQueue
arayü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.false
Kuyruk 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.null
Kuyruk 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çinjava.util.Iterator
paketi 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.null
Kuyruk 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 InterruptedException
beklerken 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 InterrupedException
beklerken kesintiye uğrarsa bir atacaktır . Bu nedenle, onu bir try… catch
bloğ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 true dö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ı?
ArrayBlockingQueue
Kullandığı 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.