Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java ArrayBlockingQueue: Geavanceerde handleiding voor blokkerende wachtrijen en thread-veilige operaties

Java ArrayBlockingQueue

Verken de Java ArrayBlockingQueue – leer hoe je deze fixed-size blokkerende wachtrij thread-veilig kunt aanmaken, manipuleren en gebruiken met duidelijke voorbeelden.

De ArrayBlockingQueue-klasse in het Java Collections Framework biedt een begrensde, thread-veilige wachtrij ondersteund door een array. Het implementeert de BlockingQueue-interface, waardoor producers en consumers kunnen coördineren via blokkerende operaties.

Java ArrayBlockingQueue: Geavanceerde handleiding voor blokkerende wachtrijen en thread-veilige operaties


Een ArrayBlockingQueue aanmaken

Importeer java.util.concurrent.ArrayBlockingQueue en instantieer met een vaste capaciteit:

ArrayBlockingQueue<Type> queue = new ArrayBlockingQueue<>(capacity);

Waar Type het elementtype is en capacity de maximale grootte.

  • Voorbeeld – String-wachtrij van grootte 5:
    ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
  • Voorbeeld – Integer-wachtrij van grootte 5:
    ArrayBlockingQueue<Integer> ages = new ArrayBlockingQueue<>(5);

Let op: Capaciteit is verplicht; het bepaalt de begrensde grootte van de wachtrij.


Kernmethoden van ArrayBlockingQueue

De klasse implementeert alle methoden van BlockingQueue voor invoegen, benaderen en verwijderen van elementen. Hieronder de meest gebruikte operaties.

Elementen invoegen

  • add(E e) – Voegt het element toe; gooit IllegalStateException als vol.
  • offer(E e) – Voegt het element toe; retourneert false als vol.
ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5); animals.add("Dog"); animals.offer("Cat"); animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals);

Output: ArrayBlockingQueue: [Dog, Cat, Horse]

Elementen benaderen

  • peek() – Haalt de head op zonder verwijdering; retourneert null als leeg.
  • iterator() – Biedt een fail-fast iterator over de wachtrij.
String head = animals.peek(); System.out.println("Head element: " + head); Iterator<String> it = animals.iterator(); while (it.hasNext()) { System.out.print(it.next() + ", "); }

Output: Head element: Dog gevolgd door de lijst van elementen.

Elementen verwijderen

  • remove() – Verwijdert en retourneert de head; gooit NoSuchElementException als leeg.
  • poll() – Verwijdert en retourneert de head; retourneert null als leeg.
  • clear() – Leegt de wachtrij.
String removed1 = animals.remove(); String removed2 = animals.poll(); animals.clear(); System.out.println("Bijgewerkte wachtrij: " + animals);

Output: Bijgewerkte wachtrij: []


Blokkerende operaties: put() en take()

Deze methoden zijn essentieel voor producer-consumer patronen. Ze blokkeren tot de operatie uitgevoerd kan worden, wat thread-coördinatie garandeert.

put()

Voegt een element toe, wachtend als de wachtrij vol is. Kan InterruptedException gooien.

try { animals.put("Dog"); animals.put("Cat"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }

take()

Verwijdert en retourneert de head, wachtend als de wachtrij leeg is. Kan InterruptedException gooien.

try { String element = animals.take(); System.out.println("Verwijderd: " + element); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }

Aanvullende convenience-methoden

MethodeBeschrijving
contains(Object o)Retourneert true als de wachtrij het opgegeven element bevat.
size()Retourneert het huidige aantal elementen.
toArray()Converteert de wachtrij naar een array.
toString()String-representatie van de wachtrij.

Waarom ArrayBlockingQueue gebruiken?

Omdat het biedt:

  • Thread-veiligheid: Ingebouwde synchronisatie voor gelijktijdige toegang.
  • Vaste grootte: Voorkomt onbeheerde geheugengroei.
  • Blokkerende semantiek: Vereenvoudigt producer-consumer coördinatie.

Wanneer één thread langzamer produceert dan de consumer, blokkeert de consumer automatisch, wat busy-waiting voorkomt en efficiënt CPU-gebruik waarborgt.


Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java if…else beheersen: control flow uitgelegd
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java Strings beheersen: aanmaken, methodes en best practices
  6. Java interfaces meesteren: concepten, implementatie en best practices
  7. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  8. Java Try-with-resources meesteren: automatische resource management uitgelegd
  9. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  10. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
  11. Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList