V tej vadnici bomo spoznali vmesnik Java BlockingQueue in njegove metode.
BlockingQueue
Vmesnik Java Collections
okvira razširja Queue
vmesnik. 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 BlockingQueue
je 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.BlockingQueue
Paket 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 ArrayBlockingQueue
in LinkedBlockingQueue
, v tem zaporedju. Ti predmeti lahko uporabljajo funkcionalnosti BlockingQueue
vmesnika.
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 100
milisekunde. Č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
, microseconds
in nanoseconds
v offer()
in poll()
metode.
Metode, ki blokirajo operacijo
BlockingQueue
Zagotavlja 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 BlockingQueue
se š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.