Java LinkedBlockingQueue

Selles õpetuses õpime näidete abil klassi LinkedBLockingQueue ja selle meetodeid.

LinkedBlockingQueueKlassi Java Collectionsraamistik annab blokeerimise järjekorda rakendamise abil seotud nimekirja.

See rakendab Java BlockingQueue liidest.

LinkedBlockingQueue'i loomine

Lingitud blokeerimisjärjekorra loomiseks peame java.util.concurrent.LinkedBlockingQueuepaketi importima .

Nii saame luua Java-s lingitud blokeerimisjärjekorra:

1. Ilma esialgse mahuta

 LinkedBlockingQueue animal = new LinkedBlockingQueue(); 

Siin on vaikimisi algmahuks 2 31 -1.

2. Algse võimsusega

 LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity); 

Siin,

  • Tüüp - lingitud blokeerimisjärjekorra tüüp
  • maht - seotud blokeerimisjärjekorra suurus

Näiteks,

 // Creating String type LinkedBlockingQueue with size 5 LinkedBlockingQueue animals = new LinkedBlockingQueue(5); // Creating Integer type LinkedBlockingQueue with size 5 LinkedBlockingQueue age = new LinkedBlockingQueue(5); 

Märkus . Lingitud loendi suuruse esitamine ei ole kohustuslik.

LinkedBlockingQueue meetodid

LinkedBlockingQueueKlassi pakub rakendamise kõigi meetodeid BlockingQueue liides.

Neid meetodeid kasutatakse lingitud blokeerimisjärjekordade elementide sisestamiseks, neile juurdepääsuks ja nende kustutamiseks.

Samuti tutvustame kahte meetodit put()ja take()mis toetavad blokeerimise operatsiooni seotud blokeerimine järjekorda.

Need kaks meetodit eristavad lingitud blokeerimisjärjekorda teistest tüüpilistest järjekordadest.

Sisestage elemendid

  • add()- Lisab lingitud blokeerimisjärjekorda määratud elemendi. See loob erandi, kui järjekord on täis.
  • offer()- Lisab lingitud blokeerimisjärjekorda määratud elemendi. See naaseb, falsekui järjekord on täis.

Näiteks,

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

Väljund

 LinkedBlockingQueue: (koer, kass, hobune) 

Juurdepääs elementidele

  • peek()- tagastab lingitud blokeerimisjärjekorra esiosa elemendi. See naaseb, nullkui järjekord on tühi.
  • iterator()- tagastab iteraatori objekti lingitud blokeerimisjärjekorra järjestikusele juurdepääsule. See loob erandi, kui järjekord on tühi. Selle kasutamiseks peame java.util.Iteratorpakendi importima .

Näiteks,

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

Väljund

 LinkedBlockingQueue: (koer, kass, hobune) juurdepääsetav element: koer LinkedBlockingQueue elemendid: koer, kass, hobune, 

Eemalda elemendid

  • remove()- Tagastab ja eemaldab lingitud blokeerimisjärjekorrast määratud elemendi. See loob erandi, kui järjekord on tühi.
  • poll()- Tagastab ja eemaldab lingitud blokeerimisjärjekorrast määratud elemendi. See naaseb, nullkui järjekord on tühi.
  • clear() - Eemaldab lingitud blokeerimisjärjekorrast kõik elemendid.

Näiteks,

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

Väljund

 LinkedBlockingQueue: (koer, kass, hobune) eemaldatud elemendid: eemaldamise () kasutamine: koer kasutab küsitlust (): kass värskendas LinkedBlockingQueue: () 

put () ja take () meetodid

In multithreading protsesse, saame kasutada put()ja take()blokeerida toimimise üks niit sünkroonida teises teemas. Need meetodid ootavad, kuni neid saab edukalt käivitada.

put () meetod

Määratud elemendi lisamiseks lingitud blokeerimisjärjekorra lõppu kasutame put()meetodit.

Kui lingitud blokeerimisjärjekord on täis, ootab ta elemendi sisestamiseks, kuni lingitud blokeerimisjärjekorras on ruumi.

Näiteks,

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

Väljund

 LinkedBlockingQueue: (koer, kass) 

Siin võib put()meetod visata, InterruptedExceptionkui see katkestatakse ootamise ajal. Seega peame selle lisama proovimise… püüdmisplokki.

võtke () meetod

Lingitud blokeerimisjärjekorra eseme tagastamiseks ja eemaldamiseks saame seda take()meetodit kasutada .

Kui lingitud blokeerimisjärjekord on tühi, ootab see, kuni lingitud blokeerimisjärjekorras on elemente kustutada.

Näiteks,

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

Väljund

 LinkedBlockingQueue: (koer, kass) eemaldatud element: koer uus LinkedBlockingQueue: (kass) 

Siin take()viskab meetod meetodi, InterrupedExceptionkui see ootamise ajal katkeb. Seega peame selle sulgema try… catchploki sisse.

Muud meetodid

Meetodid Kirjeldused
contains(element) Otsib määratud elemendi lingitud blokeerimisjärjekorda. Kui element leitakse, siis see naaseb true, kui mitte, siis tagasi false.
size() Tagastab lingitud blokeerimisjärjekorra pikkuse.
toArray() Teisendab lingitud blokeerimisjärjekorra massiiviks ja tagastab massiivi.
toString() Teisendab lingitud blokeerimisjärjekorra stringiks

Miks kasutada LinkedBlockingQueue?

LinkedBlockingQueueKasutuseks ahelloendid oma sisemällu.

Seda peetakse niidikindla kollektsioonina. Seega kasutatakse seda tavaliselt mitme keermega rakendustes.

Oletame, et üks lõim sisestab järjekorda elemente ja teine ​​lõime eemaldab järjekorrast elemendid.

Kui esimene lõime on aeglasem kui teine ​​lõime, võib lingitud blokeerimisjärjekord panna teise lõime ootama, kuni esimene lõime oma toimingud lõpule viib.

Huvitavad Artiklid...