Java ArrayBlockingQueue

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

ArrayBlockingQueuePar Java Kolekcijas ietvaros klase nodrošina bloķēšanu rindu ieviešanu, izmantojot masīvu.

Tas ievieš Java BlockingQueue saskarni.

Izveido ArrayBlockingQueue

Lai izveidotu masīvu bloķēšanas rindu, mums ir jāimportē java.util.concurrent.ArrayBlockingQueuepakete.

Pēc pakotnes importēšanas šeit var izveidot masīvu bloķēšanas rindu Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Šeit,

  • Tips - masīva bloķēšanas rindas tips
  • kapacitāte - masīva bloķēšanas rindas lielums

Piemēram,

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

Piezīme: Obligāti jānorāda masīva lielums.

ArrayBlockingQueue metodes

ArrayBlockingQueueKlase paredz nodrošināt visu metožu BlockingQueueinterfeisu.

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

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

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

Ievietot elementus

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

Piemēram,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals); ) ) 

Rezultāts

 ArrayBlockingQueue: (suns, kaķis, zirgs) 

Piekļuves elementi

  • peek()- atgriež elementu no masīva bloķēšanas rindas priekšpuses. Tas atgriežas, nullja rinda ir tukša.
  • iterator()- atgriež iteratora objektu, lai secīgi piekļūtu elementiem no masīva 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.ArrayBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("ArrayBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Rezultāts

 ArrayBlockingQueue: (suns, kaķis, zirgs) Piekļūstamais elements: Dog ArrayBlockingQueue elementi: suns, kaķis, zirgs, 

Noņemt elementus

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

Piemēram,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + 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 ArrayBlockingQueue: " + animals); ) ) 

Rezultāts

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

put () un take () metode

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 pievienotu elementu masīva bloķēšanas rindas beigām, mēs varam izmantot put()metodi.

Ja masīva bloķēšanas rinda ir pilna, tā gaida, līdz masīva bloķēšanas rindā ir vieta, lai pievienotu elementu.

Piemēram,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Rezultāts

 ArrayBlockingQueue: (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 masīva bloķēšanas rindas priekšpuses, mēs varam izmantot take()metodi.

Ja masīva bloķēšanas rinda ir tukša, tā gaida, kamēr masīva bloķēšanas rindā ir dzēšami elementi.

Piemēram,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Rezultāts

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

Š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 masīva bloķēšanas rindā. Ja elements ir atrasts, tas atgriežas true, ja nē, tas atgriežas false.
size() Atgriež masīva bloķēšanas rindas garumu.
toArray() Pārvērš masīvu bloķēšanas rindu masīvā un atgriež to.
toString() Masīva bloķēšanas rindu pārvērš virknē

Kāpēc izmantot ArrayBlockingQueue?

Par ArrayBlockingQueueizmanto masīvi, 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, tad masīva bloķēšanas rinda var likt otrajam pavedienam gaidīt, kamēr pirmais pavediens pabeidz savas darbības.

Interesanti raksti...