Java BlockingQueue Arayüzü

Bu eğitimde Java BlockingQueue arayüzü ve yöntemleri hakkında bilgi edineceğiz.

BlockingQueueJava arayüzü Collectionsçerçevesinde uzanır Queuearayüz. Herhangi bir işlemin başarıyla gerçekleştirilinceye kadar beklemesini sağlar.

Örneğin, boş bir kuyruktan bir öğeyi silmek istiyorsak, bu durumda engelleme kuyruğu silme işleminin, kuyruk silinecek bazı öğeleri içerene kadar beklemesine izin verir.

BlockingQueue Uygulayan Sınıflar

Yana BlockingQueuebir arayüz ise, biz bu doğrudan uygulanmasını sağlayamaz.

İşlevini kullanmak için BlockingQueue, onu uygulayan sınıfları kullanmamız gerekir.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Engelleme kuyrukları nasıl kullanılır?

Kullanmak için java.util.concurrent.BlockingQueuepaketi ithal etmeliyiz BlockingQueue.

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

Burada, nesnelerin animal1 ve sınıfların animal2 oluşturduk ArrayBlockingQueueve LinkedBlockingQueuesırasıyla. Bu nesneler BlockingQueuearayüzün işlevlerini kullanabilir .

Bloklama YöntemleriQueue

Bir kuyruğun dolu veya boş olmasına bağlı olarak, engelleme kuyruğunun yöntemleri 3 kategoriye ayrılabilir:

Bir istisna oluşturan yöntemler

  • add()- Kuyruğun sonundaki engelleme kuyruğuna bir öğe ekler. Kuyruk dolu ise bir istisna atar.
  • element()- Engelleme sırasının başını döndürür. Kuyruk boşsa bir istisna atar.
  • remove()- Engelleme sırasından bir öğeyi kaldırır. Kuyruk boşsa bir istisna atar.

Bir değer döndüren yöntemler

  • offer()- Belirtilen öğeyi kuyruğun sonundaki engelleme kuyruğuna ekler. falseKuyruk doluysa geri döner.
  • peek()- Engelleme sırasının başını döndürür. İade nullkuyruk boşsa.
  • poll()- Engelleme sırasından bir öğeyi kaldırır. İade nullkuyruk boşsa.

Teklif () ve anket () hakkında daha fazla bilgi

offer()Ve poll()yöntem, zaman aşımı ile birlikte kullanılabilir. Yani zaman birimlerini parametre olarak geçirebiliriz. Örneğin,

 offer(value, 100, milliseconds) 

Buraya,

  • değer kuyruğa eklenecek öğedir
  • Ve 100 milisaniyelik bir zaman aşımı belirledik

Bu, offer()yöntemin engelleme kuyruğuna 100milisaniyeler için bir öğe eklemeye çalışacağı anlamına gelir . Öğe 100 milisaniye içinde eklenemezse, yöntem geri döner false.

Not: Yerine millisecondsbiz de bu sefer birimlerini kullanabilir,: days, hours, minutes, seconds, microsecondsve nanosecondsiçinde offer()ve poll()yöntemler.

İşlemi engelleyen yöntemler

BlockingQueueAyrıca operasyonları engellemek ve kuyruk dolu veya boş olup olmadığını beklemek yöntemler sağlar.

  • put()- Engelleme kuyruğuna bir öğe ekler. Kuyruk doluysa, kuyruğun bir öğe eklemek için boşluğu olana kadar bekleyecektir.
  • take()- Engelleme kuyruğundan bir öğeyi kaldırır ve döndürür. Kuyruk boşsa, kuyruğun silinmesi gereken unsurları olana kadar bekleyecektir.

Bir kuyruğa eleman eklemek istediğimizi varsayalım. Kuyruk doluysa, put()yöntem kuyruğun öğe eklemek için boş alana sahip olmasını bekler.

Benzer şekilde, bir kuyruktaki öğeleri silmek istiyorsak. Kuyruk boşsa, take()yöntem, kuyruğun silinecek öğeleri içermesini bekleyecektir.

ArrayBlockingQueue'da BlockingQueue Uygulaması

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

Çıktı

 BlockingSıra: (2, 1, 3) Kaldırılan Öğe: 2 

Daha fazla bilgi edinmek için ArrayBlockingQueueJava ArrayBlockingQueue adresini ziyaret edin.

Neden BlockingQueue?

Java'da, iş parçacığı için güvenli koleksiyon BlockingQueueolarak kabul edilir . Bunun nedeni, çoklu iş parçacığı işlemlerinde yardımcı olabilmesidir.

Bir iş parçacığının kuyruğa eleman eklediğini ve başka bir iş parçacığının kuyruktan öğeleri kaldırdığını varsayalım.

Şimdi, eğer ilk iş parçacığı daha yavaş çalışıyorsa, engelleme kuyruğu ikinci iş parçacığını birinci iş parçacığı işlemini tamamlayana kadar bekletebilir.

Ilginç makaleler...