Јава БлоцкингКуеуе интерфејс

У овом упутству ћемо научити о интерфејсу Јава БлоцкингКуеуе и његовим методама.

BlockingQueueИнтерфејс Јава Collectionsоквира проширује Queueинтерфејс. Омогућава свакој операцији да сачека док се не може успешно извршити.

На пример, ако желимо да избришемо елемент из празног реда, тада ред за блокирање омогућава операцији брисања да сачека док ред не садржи неке елементе које треба избрисати.

Класе које примењују БлоцкингКуеуе

Будући да BlockingQueueје интерфејс, не можемо га обезбедити директном применом.

Да бисмо користили функционалност BlockingQueue, морамо да користимо класе које је имплементирају.

  • АрраиБлоцкингКуеуе
  • ЛинкедБлоцкингКуеуе

Како се користе блокирајући редови?

Морамо увести java.util.concurrent.BlockingQueueпакет да бисмо га користили BlockingQueue.

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

Овде смо креирали објекте анимал1 и анимал2 класа ArrayBlockingQueueи LinkedBlockingQueue, респективно. Ови објекти могу да користе функционалности BlockingQueueинтерфејса.

Методе БлоцкингКуеуе

На основу тога да ли је ред пун или празан, методе блокирања реда могу се поделити у 3 категорије:

Методе које доносе изузетак

  • add()- Убацује елемент у ред за блокирање на крају реда. Баца изузетак ако је ред пун.
  • element()- Враћа главу реда за блокирање. Баца изузетак ако је ред празан.
  • remove()- Уклања елемент из реда блокирања. Баца изузетак ако је ред празан.

Методе које враћају неку вредност

  • offer()- Убацује наведени елемент у ред за блокирање на крају реда. Приказује falseако је ред пун.
  • peek()- Враћа главу реда за блокирање. Враћа nullако је ред празан.
  • poll()- Уклања елемент из реда блокирања. Враћа nullако је ред празан.

Више у понуди () и анкета ()

offer()И poll()метода се може користити са тимеоут. Односно, временске јединице можемо проследити као параметар. На пример,

 offer(value, 100, milliseconds) 

Ево,

  • валуе је елемент који се убацује у ред
  • И поставили смо временско ограничење од 100 милисекунди

То значи да offer()ће метода покушати да уметне елемент у ред за блокирање на 100милисекунде. Ако елемент није могуће уметнути за 100 милисекунди, метода се враћа false.

Напомена: Уместо milliseconds, можемо користити ове временске јединице: days, hours, minutes, seconds, microsecondsи nanosecondsу offer()и poll()методе.

Методе које блокирају операцију

BlockingQueueТакође пружа методе да блокирају рад и чекати, ако ред је пуна или празна.

  • put()- Убацује елемент у ред за блокирање. Ако је ред пун, сачекаће док се у реду не нађе простора за уметање елемента.
  • take()- Уклања и враћа елемент из реда за блокирање. Ако је ред празан, сачекаће док се у реду не уклоне елементи.

Претпоставимо да желимо да уметнемо елементе у ред. Ако је ред пун, тада ће put()метода сачекати док ред нема простора за уметање елемената.

Слично томе, ако желимо да избришемо елементе из реда. Ако је ред празан, take()метода ће сачекати док ред не садржи елементе које треба избрисати.

Имплементација БлоцкингКуеуе у АрраиБлоцкингКуеуе

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

Оутпут

 БлоцкингКуеуе: (2, 1, 3) Уклоњени елемент: 2 

Да бисте сазнали више о томе ArrayBlockingQueue, посетите Јава АрраиБлоцкингКуеуе.

Зашто БлоцкингКуеуе?

У Јави BlockingQueueсе сматра колекцијом сигурном за нит . То је зато што може бити корисно у операцијама са више навоја.

Претпоставимо да једна нит убацује елементе у ред, а друга нит уклања елементе из реда.

Сада, ако прва нит ради спорије, тада ред за блокирање може натјерати другу нит да чека док прва нит не заврши своју операцију.

Занимљиви Чланци...