Selles õpetuses õpime näidete abil klassi LinkedBLockingQueue ja selle meetodeid.
LinkedBlockingQueue
Klassi Java Collections
raamistik annab blokeerimise järjekorda rakendamise abil seotud nimekirja.
See rakendab Java BlockingQueue liidest.
LinkedBlockingQueue'i loomine
Lingitud blokeerimisjärjekorra loomiseks peame java.util.concurrent.LinkedBlockingQueue
paketi 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
LinkedBlockingQueue
Klassi 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,false
kui 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,null
kui 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 peamejava.util.Iterator
pakendi 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,null
kui 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, InterruptedException
kui 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, InterrupedException
kui see ootamise ajal katkeb. Seega peame selle sulgema try… catch
ploki 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?
LinkedBlockingQueue
Kasutuseks 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.