Јава ЛинкедБлоцкингКуеуе

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

LinkedBlockingQueueКласа Јава Collectionsоквира обезбеђује спровођење блокирања редослед користећи повезану листу.

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

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

Да бисмо креирали повезани ред за блокирање, морамо увести java.util.concurrent.LinkedBlockingQueueпакет.

Ево како можемо створити повезани ред за блокирање у Јави:

1. Без почетног капацитета

 LinkedBlockingQueue animal = new LinkedBlockingQueue(); 

Овде ће задати почетни капацитет бити 2 31 -1.

2. Са почетним капацитетом

 LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity); 

Ево,

  • Тип - тип повезаног реда за блокирање
  • капацитет - величина повезаног реда за блокирање

На пример,

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

Напомена: Није обавезно наводити величину повезане листе.

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

LinkedBlockingQueueКласа обезбеђује примену свих метода у БлоцкингКуеуе интерфејсу.

Ове методе се користе за уметање, приступ и брисање елемената из повезаних редова за блокирање.

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

Ове две методе разликују повезани блокирни ред од осталих типичних редова.

Уметни елементе

  • add()- Убацује наведени елемент у повезани ред за блокирање. Добавља изузетак ако је ред пун.
  • offer()- Убацује наведени елемент у повезани ред за блокирање. Враћа се falseако је ред пун.

На пример,

 import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("LinkedBlockingQueue: " + animals); ) ) 

Оутпут

 ЛинкедБлоцкингКуеуе: (пас, мачка, коњ) 

Приступ елементима

  • peek()- Враћа елемент са предње стране повезаног реда за блокирање. Враћа се nullако је ред празан.
  • iterator()- Враћа објект итератора за секвенцијални приступ елементу из повезаног реда за блокирање. Добавља изузетак ако је ред празан. Морамо увести java.util.Iteratorпакет да бисмо га користили.

На пример,

 import java.util.concurrent.LinkedBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("LinkedBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Оутпут

 ЛинкедБлоцкингКуеуе: (Пас, Мачка, Коњ) Приступљени елемент: Пас ЛинкедБлоцкингКуеуе Елементи: Пас, Мачка, Коњ, 

Уклоните елементе

  • remove()- Враћа и уклања наведени елемент из повезаног реда за блокирање. Добавља изузетак ако је ред празан.
  • poll()- Враћа и уклања наведени елемент из повезаног реда за блокирање. Враћа се nullако је ред празан.
  • clear() - Уклања све елементе из повезаног реда за блокирање.

На пример,

 import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("LinkedBlockingQueue " + 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 LinkedBlockingQueue " + animals); ) ) 

Оутпут

 ЛинкедБлоцкингКуеуе: (Пас, Мачка, Коњ) Уклоњени елементи: Коришћење ремове (): Пас Коришћење анкете (): Мачка Ажурирано ЛинкедБлоцкингКуеуе: () 

методи пут () и таке ()

У вишенитним процесима можемо да користимо put()и take()да блокирамо рад једне нити да бисмо је синхронизовали са другом нити. Ове методе ће сачекати док се не могу успешно извршити.

пут () метода

За уметање наведеног елемента на крај повезаног реда за блокирање користимо put()методу.

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

На пример,

 import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("LinkedBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Оутпут

 ЛинкедБлоцкингКуеуе: (пас, мачка) 

Овде put()метода може бацити знак InterruptedExceptionако се прекине док се чека. Стога га морамо приложити унутар блока три… цатцх.

таке () метода

Да бисмо вратили и уклонили елемент са предње стране повезаног реда за блокирање, можемо користити take()методу.

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

На пример,

 import java.util.concurrent.LinkedBlockingQueue; class Main ( public static void main(String() args) ( LinkedBlockingQueue animals = new LinkedBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("LinkedBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); System.out.println("New LinkedBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Оутпут

 ЛинкедБлоцкингКуеуе: (Дог, Цат) Уклоњени елемент: Дог Нев ЛинкедБлоцкингКуеуе: (Цат) 

Овде ће take()метода бацити знак InterrupedExceptionиф ако је прекинут док се чека. Стога га морамо затворити у try… catchблок.

Остале методе

Методе Описи
contains(element) Претражује повезани блокирни ред за наведени елемент. Ако је елемент пронађен, он се враћа true, ако не, враћа се false.
size() Враћа дужину повезаног реда за блокирање.
toArray() Претвара повезани ред за блокирање у низ и враћа низ.
toString() Претвара повезани ред за блокирање у низ

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

Тхе LinkedBlockingQueueкористи повезане листе као своју интерну меморију.

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

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

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

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