Tässä opetusohjelmassa opitaan LinkedBLockingQueue-luokasta ja sen menetelmistä esimerkkien avulla.
LinkedBlockingQueueLuokka Java Collectionspolitiikalle esto jonon toteutuksen avulla linkitetty lista.
Se toteuttaa Java BlockingQueue -käyttöliittymän.

LinkedBlockingQueuen luominen
Linkitetyn estojonon luomiseksi meidän on tuotava java.util.concurrent.LinkedBlockingQueuepaketti.
Näin voimme luoda linkitetyn estojonon Java:
1. Ilman alkukapasiteettia
LinkedBlockingQueue animal = new LinkedBlockingQueue();
Tässä oletuskapasiteetti on oletusarvoisesti 2 31 -1.
2. Alkukapasiteetilla
LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity);
Tässä,
- Tyyppi - linkitetyn estojonon tyyppi
- kapasiteetti - linkitetyn estojonon koko
Esimerkiksi,
// Creating String type LinkedBlockingQueue with size 5 LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Creating Integer type LinkedBlockingQueue with size 5 LinkedBlockingQueue age = new LinkedBlockingQueue(5);
Huomaa: Linkitetyn luettelon kokoa ei tarvitse ilmoittaa.
LinkedBlockingQueuen menetelmät
LinkedBlockingQueueLuokka tarjoaa täytäntöönpanoa kaikkien menetelmien BlockingQueue käyttöliittymän.
Näitä menetelmiä käytetään lisäämään, käyttämään ja poistamaan linkitettyjen estojonojen elementtejä.
Lisäksi saamme oppia kaksi tapaa put()ja take()että tuki estävä operaatio liittyy esto jono.
Nämä kaksi menetelmää erottavat linkitetyn estojonon muista tyypillisistä jonoista.
Lisää elementit
add()- Lisää määritetty elementti linkitettyyn estojonoon. Se aiheuttaa poikkeuksen, jos jono on täynnä.offer()- Lisää määritetty elementti linkitettyyn estojonoon. Se palaa,falsejos jono on täynnä.
Esimerkiksi,
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); ) )
Tuotos
LinkedBlockingQueue: (koira, kissa, hevonen)
Käytä elementtejä
peek()- Palauttaa elementin linkitetyn estojonon etupuolelta. Se palaa,nulljos jono on tyhjä.iterator()- Palauttaa iteraattoriobjektin pääsemään peräkkäin elementtiin linkitetystä estojonosta. Se aiheuttaa poikkeuksen, jos jono on tyhjä. Meidän on tuotavajava.util.Iteratorpaketti sen käyttöä varten.
Esimerkiksi,
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(", "); ) ) )
Tuotos
LinkedBlockingQueue: (koira, kissa, hevonen) Käytetty elementti: koira LinkedBlockingQueue-elementit: koira, kissa, hevonen,
Poista elementit
remove()- Palauttaa ja poistaa määritetyn elementin linkitetystä estojonosta. Se aiheuttaa poikkeuksen, jos jono on tyhjä.poll()- Palauttaa ja poistaa määritetyn elementin linkitetystä estojonosta. Se palaa,nulljos jono on tyhjä.clear()- Poistaa kaikki elementit linkitetystä estojonosta.
Esimerkiksi,
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); ) )
Tuotos
LinkedBlockingQueue: (koira, kissa, hevonen) Poistetut elementit: Poista (): n avulla: Koira käyttää kyselyä (): Kissa päivitetty LinkedBlockingQueue: ()
put () ja take () -menetelmät
Monisäikeisissä prosesseissa voimme käyttää put()ja take()estää yhden säikeen toiminnan synkronoimaan sen toisen säikeen kanssa. Nämä menetelmät odottavat, kunnes ne voidaan suorittaa onnistuneesti.
put () -menetelmä
Lisätään määritetty elementti linkitetyn estojonon loppuun käyttämällä put()menetelmää.
Jos linkitetty esto-jono on täynnä, se odottaa, kunnes linkitetyssä esto-jonossa on tilaa elementin lisäämiseksi.
Esimerkiksi,
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); ) ) )
Tuotos
LinkedBlockingQueue: (koira, kissa)
Tässä put()menetelmä voi heittää, InterruptedExceptionjos se keskeytyy odottaessaan. Siksi meidän on suljettava se try … catch blockiin.
ota () menetelmä
Palata ja poistaa elementti linkitetyn estojonon etuosasta voimme käyttää take()menetelmää.
Jos linkitetty estojono on tyhjä, se odottaa, kunnes linkitetyssä estojonossa on elementtejä.
Esimerkiksi,
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); ) ) )
Tuotos
LinkedBlockingQueue: (Koira, kissa) Poistettu elementti: Koira Uusi LinkedBlockingQueue: (Kissa)
Tässä take()menetelmä heittää, InterrupedExceptionjos se keskeytyy odottaessaan. Siksi meidän on suljettava se try… catchkorttelin sisään.
Muut menetelmät
| Menetelmät | Kuvaukset |
|---|---|
contains(element) | Hakee linkitetyn estojonon määritetylle elementille. Jos elementti löytyy, se palaa true, jos ei, se palaa false. |
size() | Palauttaa linkitetyn estojonon pituuden. |
toArray() | Muuntaa linkitetyn estojonon matriisiksi ja palauttaa matriisin. |
toString() | Muuntaa linkitetyn estojonon merkkijonoksi |
Miksi käyttää LinkedBlockingQueue-ohjelmaa?
LinkedBlockingQueueKäyttötarkoitukset liittyvät luettelot sen sisäistä tallennustilaa.
Sitä pidetään langattomaksi kokoelmaksi. Siksi sitä käytetään yleensä monisäikeisissä sovelluksissa.
Oletetaan, että yksi säie lisää elementtejä jonoon ja toinen säie poistaa elementtejä jonosta.
Nyt, jos ensimmäinen ketju on hitaampi kuin toinen ketju, linkitetty estojono voi saada toisen ketjun odottamaan, kunnes ensimmäinen ketju on suorittanut toimintansa.








