Tässä opetusohjelmassa opitaan ArrayBlockingQueue-luokasta ja sen menetelmistä esimerkkien avulla.
ArrayBlockingQueue
Luokka Java kokoelmat politiikalle esto jonon toteutuksen avulla jono.
Se toteuttaa Java BlockingQueue -käyttöliittymän.
ArrayBlockingQueuen luominen
Taulukon estojonon luomiseksi meidän on tuotava java.util.concurrent.ArrayBlockingQueue
paketti.
Kun tuot paketin, voimme luoda taulukon estävän jonon seuraavasti:
ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity);
Tässä,
- Tyyppi - taulukon estojonon tyyppi
- kapasiteetti - taulukon estojonon koko
Esimerkiksi,
// Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5);
Huomaa: Taulukon koko on pakollinen.
ArrayBlockingQueue-menetelmät
ArrayBlockingQueue
Luokka tarjoaa täytäntöönpanoa kaikkien menetelmien BlockingQueue
avulla.
Näitä menetelmiä käytetään lisäämään, käyttämään ja poistamaan elementtejä taulukon esto-jonoista.
Lisäksi saamme oppia kaksi tapaa put()
ja take()
että tuki estävä toiminta jono esto jono.
Nämä kaksi menetelmää erottavat matriisin estävän jonon muista tyypillisistä jonoista.
Lisää elementit
add()
- Lisää määritetty elementti taulukon esto-jonoon. Se aiheuttaa poikkeuksen, jos jono on täynnä.offer()
- Lisää määritetty elementti taulukon esto-jonoon. Se palaa,false
jos jono on täynnä.
Esimerkiksi,
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); ) )
Tuotos
ArrayBlockingQueue: (koira, kissa, hevonen)
Käytä elementtejä
peek()
- Palauttaa elementin taulukon estojonon edestä. Se palaa,null
jos jono on tyhjä.iterator()
- Palauttaa iteraattoriobjektin pääsemään peräkkäin elementteihin ryhmän estojonosta. Se aiheuttaa poikkeuksen, jos jono on tyhjä. Meidän on tuotavajava.util.Iterator
paketti sen käyttöä varten.
Esimerkiksi,
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(", "); ) ) )
Tuotos
ArrayBlockingQueue: (koira, kissa, hevonen) Käytetty elementti: Dog ArrayBlockingQueue -elementit: koira, kissa, hevonen,
Poista elementit
remove()
- Palauttaa ja poistaa tietyn elementin taulukon esto-jonosta. Se aiheuttaa poikkeuksen, jos jono on tyhjä.poll()
- Palauttaa ja poistaa tietyn elementin taulukon esto-jonosta. Se palaa,null
jos jono on tyhjä.clear()
- Poistaa kaikki elementit taulukon esto-jonosta.
Esimerkiksi,
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); ) )
Tuotos
ArrayBlockingQueue: (koira, kissa, hevonen) Poistetut elementit: käyttämällä remove (): Koira käyttää kyselyä (): Cat päivitetty ArrayBlockingQueue: ()
put () ja take () menetelmä
Monisäikeisissä prosesseissa voimme käyttää put()
ja take()
estää yhden säikeen toiminnan synkronoimaan sen toisen säikeen kanssa. Nämä menetelmät odottavat, kunnes ne voidaan suorittaa onnistuneesti.
put () -menetelmä
Jos haluat lisätä elementin taulukon estojonon loppuun, voimme käyttää put()
menetelmää.
Jos taulukon esto-jono on täynnä, se odottaa, kunnes taulukon esto-jonossa on tilaa elementin lisäämiseksi.
Esimerkiksi,
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); ) ) )
Tuotos
ArrayBlockingQueue: (koira, kissa)
Tässä put()
menetelmä voi heittää, InterruptedException
jos se keskeytyy odottaessaan. Siksi meidän on suljettava se try … catch blockiin.
ota () menetelmä
Palataksemme ja poistamalla elementin taulukon estojonon etuosasta voimme käyttää take()
menetelmää.
Jos taulukon esto-jono on tyhjä, se odottaa, että taulukon esto-jonossa on elementtejä poistettavia.
Esimerkiksi,
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); ) ) )
Tuotos
ArrayBlockingQueue: (koira, kissa) poistettu elementti: koira
Tässä take()
menetelmä heittää, InterrupedException
jos se keskeytyy odottaessaan. Siksi meidän on suljettava se try… catch
korttelin sisään.
Muut menetelmät
Menetelmät | Kuvaukset |
---|---|
contains(element) | Hakee määritetyn elementin taulukon esto-jonoa. Jos elementti löytyy, se palaa true , jos ei, se palaa false . |
size() | Palauttaa taulukon estojonon pituuden. |
toArray() | Muuntaa taulun estävän jonon matriisiksi ja palauttaa sen. |
toString() | Muuntaa taulukon estävän jonon merkkijonoksi |
Miksi käyttää ArrayBlockingQueue-ohjelmaa?
ArrayBlockingQueue
Käyttää suurta joukkoa kuin sen sisäiseen muistiin.
Sitä pidetään langattomaksi kokoelmaksi. Siksi sitä käytetään yleensä monisäikeisissä sovelluksissa.
Oletetaan, että yksi säie lisää elementtejä jonoon ja toinen säie poistaa elementtejä jonosta.
Nyt, jos ensimmäinen ketju on hitaampi kuin toinen ketju, matriisin estävä jono voi saada toisen ketjun odottamaan, kunnes ensimmäinen ketju on suorittanut toimintansa.