Java bloķēšanas rindas saskarne

Šajā apmācībā mēs uzzināsim par Java BlockingQueue saskarni un tās metodēm.

BlockingQueueJava interfeisu Collectionsietvaros paplašina Queueinterfeisu. Tas ļauj jebkurai operācijai gaidīt, līdz to var veiksmīgi veikt.

Piemēram, ja mēs vēlamies dzēst elementu no tukšas rindas, tad bloķēšanas rinda ļauj dzēšanas operācijai gaidīt, kamēr rindā būs daži dzēšamie elementi.

Klases, kas ievieš bloķēšanas rindu

Tā kā BlockingQueuetā ir saskarne, mēs nevaram nodrošināt tās tiešu ieviešanu.

Lai izmantotu grupas funkcionalitāti BlockingQueue, mums jāizmanto klases, kas to ievieš.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Kā izmantot bloķēšanas rindas?

java.util.concurrent.BlockingQueueLai to izmantotu, mums jāimportē pakete BlockingQueue.

 // Array implementation of BlockingQueue BlockingQueue animal1 = new ArraryBlockingQueue(); // LinkedList implementation of BlockingQueue BlockingQueue animal2 = new LinkedBlockingQueue(); 

Šeit mēs esam izveidojuši attiecīgi klases ArrayBlockingQueueun objekta animal1 un animal2 priekšmetus LinkedBlockingQueue. Šie objekti var izmantot BlockingQueuesaskarnes funkcionalitāti .

Bloķēšanas rindas metodes

Pamatojoties uz to, vai rinda ir pilna vai tukša, bloķēšanas rindas metodes var iedalīt 3 kategorijās:

Metodes, kas rada izņēmumu

  • add()- ievieto bloķēšanas rindā elementu rindas beigās. Izmet izņēmumu, ja rinda ir pilna.
  • element()- atgriež bloķēšanas rindas galvu. Izmet izņēmumu, ja rinda ir tukša.
  • remove()- noņem elementu no bloķēšanas rindas. Izmet izņēmumu, ja rinda ir tukša.

Metodes, kas atgriež kādu vērtību

  • offer()- ievieto norādīto elementu bloķēšanas rindā rindas beigās. Atgriež, falseja rinda ir pilna.
  • peek()- atgriež bloķēšanas rindas galvu. Atgriež, nullja rinda ir tukša.
  • poll()- noņem elementu no bloķēšanas rindas. Atgriež, nullja rinda ir tukša.

Vairāk par piedāvājumu () un aptauju ()

offer()Un poll()metodi var izmantot ar noildze. Tas ir, mēs varam nodot laika vienības kā parametru. Piemēram,

 offer(value, 100, milliseconds) 

Šeit,

  • vērtība ir elements, kas jāievieto rindā
  • Un mēs esam iestatījuši taimautu 100 milisekundes

Tas nozīmē, ka offer()metode mēģinās ievietot elementu bloķēšanas rindā 100milisekundes. Ja elementu nevar ievietot 100 milisekundēs, metode atgriežas false.

Piezīme: Tā vietā milliseconds, mēs varam arī izmantot šos laika vienībās: days, hours, minutes, seconds, microsecondsun nanosecondskas offer()un poll()metodes.

Metodes, kas bloķē darbību

Tiek piedāvātas BlockingQueuearī metodes, kā bloķēt operācijas un gaidīt, vai rinda ir pilna vai tukša.

  • put()- bloķēšanas rindā ievieto elementu. Ja rinda ir pilna, tā gaidīs, kamēr rindā būs vietas elementa ievietošanai.
  • take()- noņem un atdod elementu no bloķēšanas rindas. Ja rinda ir tukša, tā gaidīs, kamēr rindā būs dzēšami elementi.

Pieņemsim, ka mēs vēlamies ievietot elementus rindā. Ja rinda ir pilna, put()metode gaidīs, kamēr rindā būs vietas elementu ievietošanai.

Līdzīgi, ja mēs vēlamies dzēst elementus no rindas. Ja rinda ir tukša, take()metode gaidīs, kamēr rindā būs dzēšamie elementi.

BlockingQueue ieviešana ArrayBlockingQueue

 import java.util.concurrent.BlockingQueue; import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( // Create a blocking queue using the ArrayBlockingQueue BlockingQueue numbers = new ArrayBlockingQueue(5); try ( // Insert element to blocking queue numbers.put(2); numbers.put(1); numbers.put(3); System.out.println("BLockingQueue: " + numbers); // Remove Elements from blocking queue int removedNumber = numbers.take(); System.out.println("Removed Number: " + removedNumber); ) catch(Exception e) ( e.getStackTrace(); ) ) ) 

Rezultāts

 BlockingQueue: (2, 1, 3) Noņemts elements: 2 

Lai uzzinātu vairāk par to ArrayBlockingQueue, apmeklējiet Java ArrayBlockingQueue.

Kāpēc bloķēšanas rinda?

Java valodā tā BlockingQueuetiek uzskatīta par vītnei drošu kolekciju. Tas ir tāpēc, ka tas var būt noderīgs vairāku pavedienu operācijās.

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

Tagad, ja pirmais pavediens darbojas lēnāk, bloķēšanas rinda var likt otrajam pavedienam gaidīt, kamēr pirmais pavediens pabeidz savu darbību.

Interesanti raksti...