Какво представлява BlockingQueue в Java и как да го приложим?



Тази статия за BlockingQueue в Java ще ви помогне да научите повече за интерфейса BlockingQueue. Той също така ще ви даде представа за неговите методи и практическо изпълнение

е изключително популярен сред програмистите поради широката си гама от вградени функции. В повечето случаи ще имате специално решение за проблема си, дори преди той да се появи. Такава изключително полезна и важна част от е интерфейсът BlockingQueue в Java. Чрез средата на тази статия ще хвърля малко светлина върху BlockingQueue в Java и методите за нейното прилагане.

По-долу са разгледани темите в тази статия:





Интерфейс BlockingQueue в Java

BlockingQueue в Java е интерфейс, който е добавен в Java 1.5 заедно с няколко други едновременни класа на помощната програма като ConcurrentHashMap, CopyOnWriteArrrayList и др. Интерфейсът BlockingQueue принадлежи на java.util.concurrent пакет .Този интерфейс подобрява контрола на потока чрез активиране на блокиране, в случай че нишка се опитва да деактивира празна опашка или да постави пълна опашка. И в двата случая този интерфейс е полезен.По-просто казано, да предположим a се опитва да добави елементи във вече пълна опашка. На този етап в програмата ще бъде извикана BlockingQueue, която ще блокира конкретната нишка, докато друга нишка освободи опашката, за да освободи място. Това може да е резултат или от оттегляне на елемент от елементите за освобождаване на цялата опашка. По същия начин BlockingQueue ще бъде извикан, за да блокира нишка, опитвайки се да деактивира вече празна опашка, докато някои други нишки се вмъкнат или добавят елемент в празното опашка .

Докато работите с интерфейса BlockingQueue в Java, трябва да помните, че той не приема нулева стойност. В случай, че се опитате да го направите, той незабавно ще хвърли NullPointerException. Фигурата по-долу представя работата на интерфейса BlockingQueue в Java.



BlockingQueue - BlockingQueue в Java - EdurekaТова интерфейс се използва главно между производители и потребители, тъй като е безопасно за нишки.Това, което имам предвид, е, че интерфейсът BlockingQueue може да се използва за създаване на опашка, която може да бъде споделена както от производителя, така и от потребителя

За да работите с BlockingQueue в Java, първо трябва да се запознаете с нейните типове. Позволете ми да ви запозная с тях в следващия раздел на тази статия.

предаване на аргументи от командния ред в java

Видове конструктори за BlockingQueue в Java

Има два типа конструктори за интерфейс BlockingQueue в Java:



  • Неограничена опашка: За този тип опашка капацитетът ще бъде зададен на Integer.MAX_VALUE. Неограничената опашка никога няма да бъде блокирана, тъй като може да нараства динамично, всеки път, когато елемент се вмъкне в нея. По-долу е синтаксисът за създаване на неограничена опашка:
BlockingQueue bq = нов LinkedBlockingDeque ()
  • Ограничена опашка: За този вид опашка трябва да предадете капацитета на опашката по време на нейното създаване, т.е. като строител параметър. След като размерът е зададен, той не може да бъде променен. По-долу е синтаксисът за създаване на ограничена опашка:
BlockingQueue bq = нов LinkedBlockingDeque (10)

След като вече сте запознати с начините за внедряване на BlockingQueue в Java, позволете ми да изброя няколко от методите му.

Методи в интерфейса BlockingQueue

Метод Описание
булево добавяне (E e) Този метод помага при вмъкването на посочения елемент в тази опашка, ако има място в опашката, иначе ще имахвърлиIllegalStateException
boolean съдържа (Обект o) Този метод връща true, ако опашката съдържа посочения елемент
int drainTo (Колекция c) Този метод ще премахне всички налични елементи от опашката и ще ги добави към посочената колекция
int drainTo (Колекция c, int maxElements) Този метод ще премахне от дадения брой налични елементи от опашката и ще ги добави към посочения
булоео предложение (E e) Този метод ще вмъкне посочения елемент в опашката, ако не е пълен и връща true, в противен случай ще върне false
булева оферта (E e, дълго време за изчакване, единица TimeUnit) Този метод ще вмъкне посочения елемент в опашката. В случай, че опашката е пълна, тя ще изчака до определеното време за изчакване, за да стане свободното място.
E анкета (дълго време за изчакване, единица TimeUnit) Този метод помага при извличането и премахването на главата на опашката. В случай, че опашката е празна, тя ще изчака до определеното време за изчакване, за да стане елемент на разположение
пусто място (E e) Този метод ще вмъкне посочения елемент в опашката, като изчака пространството да стане налично, в случай че опашката е пълна
int preostaliCapacity () Този метод помага за връщане на броя на допълнителните елементи, които тази опашка в идеалния случай може да приеме, без да бъде блокирана
булево премахване (обект o) Този метод ще премахне единичен екземпляр на посочения елемент от опашката само ако той е налице
E вземете () Този метод ще помогне при извличането и премахването на главата на опашката, като изчака елементът да стане достъпен, в случай че опашката е празна.

Реализации на BlockingQueue

Тук ще внедря един прост пример за BlockingQueue в Java, къдетоклас EduProducer ще генерира данните и ще ги вмъкне в a опашка , едновременно друг клас, EduConsumer ще премахне данните от същата опашка.

как да използвам набори в java -

За това ще създам 3 класа, а именно:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Нека сега създадем всеки от тези класове един по един.

EduProducer.java

пакет edureka импортиране java.util.concurrent.BlockingQueue публичен клас EduProducer изпълнява Runnable {частен финал BlockingQueue опашка @Override публична void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } private void process () хвърля InterruptedException {// Поставете 10 ints в Queue for (int i = 0 i<10 i++) { System.out.println('[Producer] Add : ' + i) queue.put(i) System.out.println('[Producer] Queue's Remaining Capacity : ' + queue.remainingCapacity()) Thread.sleep(150) } } public EduProducer(BlockingQueue queue) { this.queue = queue } }

EduConsumer.java

пакет edureka импортиране java.util.concurrent.BlockingQueue публичен клас EduConsumer реализира Runnable {private final BlockingQueue queue @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptException e) {Thread.currentThread (). Interrupt ()}} процес на частна невалидност (Integer take) хвърля InterruptException {System.out.println ('[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (BlockingQueue опашка) {this.queue = queue}}

EdurekaMain.java

пакет edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue публичен клас EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (queue) .start () нова тема (нова EduConsumer (опашка)). start ()}}

След като приключите с писането на кода, изпълнете програмата, за да получите изхода по-долу:

алгоритъм на Фибоначи c ++
[Производител] Добавяне: 0 [Потребител] Вземете: 0 [Производител] Остатъчен капацитет на опашката: 9 [Производител] Добавяне: 1 [Производител] Остатъчен капацитет на опашката: 9 [Производител] Добавяне: 2 [Производител] Остатъчен капацитет на опашката: 8 [Производител ] Добавяне: 3 [Производител] Остатъчен капацитет на опашката: 7 [Потребител] Вземете: 1 [Производител] Добавяне: 4 [Оставащ капацитет на производителя] Опашка: 7 [Производител] Добавяне: 5 [Производител] Остатъчен капацитет на опашката: 6 [Производител] Добавяне : 6 [Производител] Останалият капацитет на опашката: 5 [Потребител] Вземете: 2 [Производител] Добавяне: 7 [Производител] Остатъчен капацитет на опашката: 5 [Производител] Добавяне: 8 [Производител] Остатъчен капацитет на опашката: 4 [Производител] Добавяне: 9 [Производител] Останалият капацитет на опашката: 3 [Потребител] Вземете: 3 [Потребител] Вземете: 4 [Потребител] Вземете: 5 [Потребител] Вземете: 6 [Потребител] Вземете: 7 [Потребител] Вземете: 8 [Потребител] Вземете: 9

Това ни води до края на тази статия за BlockingQueue в Java. Ако искате да научите Java по-подробно, можете да се обърнете към нашата както добре.

След като разбрахте основите на BlockingQueue в Java, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен за студенти и професионалисти, които искат да бъдат Java Developer. Курсът е създаден, за да ви даде начален старт в Java програмирането и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Spring.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на тази „BlockingQueue в Java“ и ние ще се свържем с вас възможно най-скоро.