Java LinkedBlockingQueue

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 tuotava java.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.

Mielenkiintoisia artikkeleita...