Java BlockingQueue vmesnik

V tej vadnici bomo spoznali vmesnik Java BlockingQueue in njegove metode.

BlockingQueueVmesnik Java Collectionsokvira razširja Queuevmesnik. Omogoča, da vsaka operacija počaka, dokler je ni mogoče uspešno izvesti.

Če želimo na primer element izbrisati iz prazne čakalne vrste, potem blokirna vrsta omogoča, da operacija brisanja počaka, dokler čakalna vrsta vsebuje nekatere elemente, ki jih je treba izbrisati.

Razredi, ki izvajajo BlockingQueue

Ker BlockingQueueje vmesnik, ga ne moremo zagotoviti neposredno.

Da bi lahko uporabili funkcionalnost BlockingQueue, moramo uporabiti razrede, ki jo izvajajo.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Kako uporabiti blokirne čakalne vrste?

java.util.concurrent.BlockingQueuePaket moramo uvoziti, da ga lahko uporabimo BlockingQueue.

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

Tukaj smo ustvarili predmete animal1 in animal2 razredov ArrayBlockingQueuein LinkedBlockingQueue, v tem zaporedju. Ti predmeti lahko uporabljajo funkcionalnosti BlockingQueuevmesnika.

Metode BlockingQueue

Glede na to, ali je čakalna vrsta polna ali prazna, lahko metode blokirne čakalne vrste razdelimo v 3 kategorije:

Metode, ki povzročajo izjemo

  • add()- Vstavi blok v čakalno vrsto na koncu čakalne vrste. Vrže izjemo, če je vrsta polna.
  • element()- Vrne glavo čakalne vrste. Vrže izjemo, če je vrsta prazna.
  • remove()- Odstrani element iz čakalne vrste. Vrže izjemo, če je vrsta prazna.

Metode, ki vrnejo neko vrednost

  • offer()- Vstavi navedeni element v blokirno vrsto na koncu čakalne vrste. Vrne, falseče je vrsta polna.
  • peek()- Vrne glavo čakalne vrste. Vrne, nullče je vrsta prazna.
  • poll()- Odstrani element iz čakalne vrste. Vrne, nullče je vrsta prazna.

Več v ponudbi () in anketa ()

offer()In poll()metoda se lahko uporablja s časovne omejitve. To pomeni, da lahko kot parameter prenesemo časovne enote. Na primer

 offer(value, 100, milliseconds) 

Tukaj,

  • vrednost je element, ki ga je treba vstaviti v čakalno vrsto
  • In določili smo časovno omejitev 100 milisekund

To pomeni, da offer()bo metoda poskušala element vstaviti element v čakalno vrsto za 100milisekunde. Če elementa ni mogoče vstaviti v 100 milisekundah, se metoda vrne false.

Opomba: Namesto milliseconds, lahko uporabite tudi te časovne enote: days, hours, minutes, seconds, microsecondsin nanosecondsv offer()in poll()metode.

Metode, ki blokirajo operacijo

BlockingQueueZagotavlja tudi metode za blokiranje operacije in čakali, če je čakalna vrsta polna ali prazna.

  • put()- V vrstico za blokiranje vstavi element. Če je čakalna vrsta polna, bo počakala, dokler čakalna vrsta ne bo imela prostora za vstavljanje elementa.
  • take()- Odstrani in vrne element iz blokirne vrste. Če je čakalna vrsta prazna, bo počakala, da bodo v čakalni vrsti elementi izbrisani.

Denimo, da želimo elemente vstaviti v čakalno vrsto. Če je čakalna vrsta polna, bo put()metoda počakala, dokler čakalna vrsta ne bo imela prostora za vstavljanje elementov.

Podobno, če želimo elemente izbrisati iz čakalne vrste. Če je vrsta prazna, bo take()metoda počakala, da čakalna vrsta vsebuje elemente, ki jih je treba izbrisati.

Izvajanje BlockingQueue v ArrayBlockingQueue

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

Izhod

 BlockingQueue: (2, 1, 3) Odstranjeni element: 2 

Če želite izvedeti več o tem ArrayBlockingQueue, obiščite Java ArrayBlockingQueue.

Zakaj BlockingQueue?

V Javi BlockingQueuese šteje za zbirko, ki je varna pred nitmi . To je zato, ker je lahko v pomoč pri večnitnih operacijah.

Denimo, da ena nit vstavlja elemente v čakalno vrsto, druga nit pa odstranjuje elemente iz čakalne vrste.

Zdaj, če prva nit teče počasneje, lahko blokirna vrsta povzroči, da druga nit počaka, da prva nit zaključi svoje delovanje.

Zanimive Članki...