Java LinkedBlockingQueue

Šajā apmācībā mēs ar piemēru palīdzību uzzināsim par LinkedBLockingQueue klasi un tās metodēm.

LinkedBlockingQueueJava klases Collectionsietvaros nodrošina bloķēšanu rindu ieviešanu, izmantojot saistītu sarakstu.

Tas ievieš Java BlockingQueue saskarni.

LinkedBlockingQueue izveide

Lai izveidotu saistītu bloķēšanas rindu, mums ir jāimportē java.util.concurrent.LinkedBlockingQueuepakotne.

Lūk, kā mēs varam izveidot saistītu bloķēšanas rindu Java:

1. Bez sākotnējās jaudas

 LinkedBlockingQueue animal = new LinkedBlockingQueue(); 

Šeit noklusējuma sākotnējā jauda būs 2 31 -1.

2. Ar sākotnējo jaudu

 LinkedBlockingQueue animal = new LinkedBlockingQueue(int capacity); 

Šeit,

  • Tips - saistītās bloķēšanas rindas veids
  • kapacitāte - saistītās bloķēšanas rindas lielums

Piemēram,

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

Piezīme. Saistītā saraksta lielums nav obligāti jānorāda.

LinkedBlockingQueue metodes

LinkedBlockingQueueKlase paredz nodrošināt visu metožu BlockingQueue interfeisu.

Šīs metodes tiek izmantotas, lai ievietotu, piekļūtu un dzēstu elementus no saistītajām bloķēšanas rindām.

Arī mēs uzzināt par divām metodēm put()un take()kas atbalsta bloķēšanas darbību saistītajā bloķēšanas rindā.

Šīs divas metodes atšķir saistīto bloķēšanas rindu no citām tipiskām rindām.

Ievietot elementus

  • add()- ievieto norādīto elementu saistītajā bloķēšanas rindā. Tas rada izņēmumu, ja rinda ir pilna.
  • offer()- ievieto norādīto elementu saistītajā bloķēšanas rindā. Tas atgriežas, falseja rinda ir pilna.

Piemēram,

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

Rezultāts

 LinkedBlockingQueue: (suns, kaķis, zirgs) 

Piekļuves elementi

  • peek()- atgriež elementu no saistītās bloķēšanas rindas priekšpuses. Tas atgriežas, nullja rinda ir tukša.
  • iterator()- atgriež iteratora objektu, lai secīgi piekļūtu elementam no saistītās bloķēšanas rindas. Tas rada izņēmumu, ja rinda ir tukša. Mums ir jāimportē java.util.Iteratorpakete, lai to izmantotu.

Piemēram,

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

Rezultāts

 LinkedBlockingQueue: (suns, kaķis, zirgs) pieejamais elements: suns LinkedBlockingQueue elementi: suns, kaķis, zirgs, 

Noņemt elementus

  • remove()- atgriež un noņem noteiktu elementu no saistītās bloķēšanas rindas. Tas rada izņēmumu, ja rinda ir tukša.
  • poll()- atgriež un noņem noteiktu elementu no saistītās bloķēšanas rindas. Tas atgriežas, nullja rinda ir tukša.
  • clear() - Noņem visus elementus no saistītās bloķēšanas rindas.

Piemēram,

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

Rezultāts

 LinkedBlockingQueue: (suns, kaķis, zirgs) Noņemtie elementi: Izmantojot remove (): suns izmanto aptauju (): Cat atjaunināja LinkedBlockingQueue: () 

put () un take () metodes

Daudzlīniju procesos mēs varam izmantot put()un take()bloķēt viena pavediena darbību, lai sinhronizētu to ar citu pavedienu. Šīs metodes gaidīs, līdz tās varēs veiksmīgi izpildīt.

put () metode

Lai ievietotu norādīto elementu saistītās bloķēšanas rindas beigās, mēs izmantojam put()metodi.

Ja saistītā bloķēšanas rinda ir pilna, tā gaida, līdz saistītajā bloķēšanas rindā ir vieta elementa ievietošanai.

Piemēram,

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

Rezultāts

 LinkedBlockingQueue: (suns, kaķis) 

Šeit put()metode var mest, InterruptedExceptionja tā tiek pārtraukta gaidīšanas laikā. Tādējādi mums tas jāpievieno izmēģinājuma … ķeršanas blokam.

ņemt () metode

Lai atgrieztu un noņemtu elementu no saistītās bloķēšanas rindas priekšpuses, mēs varam izmantot take()metodi.

Ja saistītā bloķēšanas rinda ir tukša, tā gaida, līdz saistītās bloķēšanas rindā ir dzēsti elementi.

Piemēram,

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

Rezultāts

 LinkedBlockingQueue: (suns, kaķis) noņemtais elements: suns jauns LinkedBlockingQueue: (kaķis) 

Šeit take()metode izmet, InterrupedExceptionja tā tiek pārtraukta gaidīšanas laikā. Tādējādi mums tas jāievieto try… catchbloka iekšpusē .

Citas metodes

Metodes Apraksti
contains(element) Meklē norādītā elementa saistīto bloķēšanas rindu. Ja elements ir atrasts, tas atgriežas true, ja nē, tas atgriežas false.
size() Atgriež saistītās bloķēšanas rindas garumu.
toArray() Pārvērš saistīto bloķēšanas rindu masīvā un atgriež masīvu.
toString() Pārvērš saistīto bloķēšanas rindu par virkni

Kāpēc izmantot LinkedBlockingQueue?

Par LinkedBlockingQueueizmanto saistīti saraksti, jo tās iekšējās atmiņas.

To uzskata par vītnei drošu kolekciju. Tādējādi to parasti izmanto vairāku vītņu lietojumprogrammās.

Pieņemsim, ka viens pavediens ievieto elementus rindā, bet cits pavediens noņem elementus no rindas.

Tagad, ja pirmais pavediens ir lēnāks nekā otrais pavediens, saistītā bloķēšanas rinda var likt otrajam pavedienam gaidīt, kamēr pirmais pavediens pabeidz savas darbības.

Interesanti raksti...