Tässä opetusohjelmassa opitaan LinkedBLockingQueue-luokasta ja sen menetelmistä esimerkkien avulla.
LinkedBlockingQueue
Luokka Java Collections
politiikalle 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.LinkedBlockingQueue
paketti.
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
LinkedBlockingQueue
Luokka 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,false
jos 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,null
jos 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.Iterator
paketti 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,null
jos 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ää, InterruptedException
jos 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ää, InterrupedException
jos se keskeytyy odottaessaan. Siksi meidän on suljettava se try… catch
korttelin 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?
LinkedBlockingQueue
Kä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.