Java ArrayBlockingQueue

Σε αυτό το σεμινάριο, θα μάθουμε για την τάξη ArrayBlockingQueue και τις μεθόδους της με τη βοήθεια παραδειγμάτων.

Η ArrayBlockingQueueκλάση του πλαισίου συλλογών Java παρέχει την εφαρμογή ουράς αποκλεισμού χρησιμοποιώντας έναν πίνακα.

Εφαρμόζει τη διεπαφή Java BlockingQueue.

Δημιουργία ArrayBlockingQueue

Για να δημιουργήσουμε μια ουρά αποκλεισμού πίνακα, πρέπει να εισαγάγουμε το java.util.concurrent.ArrayBlockingQueueπακέτο.

Μόλις εισαγάγουμε το πακέτο, εδώ είναι πώς μπορούμε να δημιουργήσουμε μια ουρά αποκλεισμού συστοιχιών στην Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Εδώ,

  • Τύπος - ο τύπος της ουράς αποκλεισμού πίνακα
  • χωρητικότητα - το μέγεθος της ουράς αποκλεισμού του πίνακα

Για παράδειγμα,

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

Σημείωση: Είναι υποχρεωτικό να παρέχετε το μέγεθος του πίνακα.

Μέθοδοι του ArrayBlockingQueue

Η ArrayBlockingQueueτάξη παρέχει την εφαρμογή όλων των μεθόδων στη BlockingQueueδιεπαφή.

Αυτές οι μέθοδοι χρησιμοποιούνται για την εισαγωγή, πρόσβαση και διαγραφή στοιχείων από ουρές αποκλεισμού συστοιχιών.

Επίσης, θα μάθουμε για δύο μεθόδους put()και take()που υποστηρίζουν τη λειτουργία αποκλεισμού στην ουρά αποκλεισμού συστοιχιών.

Αυτές οι δύο μέθοδοι διακρίνουν την ουρά αποκλεισμού συστοιχιών από άλλες τυπικές ουρές.

Εισαγωγή στοιχείων

  • add()- Εισάγει το καθορισμένο στοιχείο στην ουρά αποκλεισμού πίνακα. Ρίχνει μια εξαίρεση εάν η ουρά είναι γεμάτη.
  • offer()- Εισάγει το καθορισμένο στοιχείο στην ουρά αποκλεισμού πίνακα. Επιστρέφει falseεάν η ουρά είναι γεμάτη.

Για παράδειγμα,

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

Παραγωγή

 ArrayBlockingQueue: (Σκύλος, γάτα, άλογο) 

Στοιχεία πρόσβασης

  • peek()- Επιστρέφει ένα στοιχείο από το μέτωπο της ουράς αποκλεισμού του πίνακα. Επιστρέφει nullεάν η ουρά είναι κενή.
  • iterator()- Επιστρέφει ένα αντικείμενο επανάληψης για την πρόσβαση διαδοχικά στοιχεία από την ουρά αποκλεισμού πίνακα Ρίχνει μια εξαίρεση εάν η ουρά είναι κενή. Πρέπει να εισαγάγουμε το java.util.Iteratorπακέτο για να το χρησιμοποιήσουμε.

Για παράδειγμα,

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

Παραγωγή

 ArrayBlockingQueue: (Dog, Cat, Horse) Στοιχείο πρόσβασης: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse, 

Κατάργηση στοιχείων

  • remove()- Επιστρέφει και αφαιρεί ένα καθορισμένο στοιχείο από την ουρά αποκλεισμού του πίνακα. Ρίχνει μια εξαίρεση εάν η ουρά είναι κενή.
  • poll()- Επιστρέφει και αφαιρεί ένα καθορισμένο στοιχείο από την ουρά αποκλεισμού συστοιχιών. Επιστρέφει nullεάν η ουρά είναι κενή.
  • clear() - Αφαιρεί όλα τα στοιχεία από την ουρά αποκλεισμού του πίνακα.

Για παράδειγμα,

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

Παραγωγή

 ArrayBlockingQueue: (Σκύλος, γάτα, άλογο) Στοιχεία που αφαιρέθηκαν: Χρήση αφαίρεσης (): Σκύλος που χρησιμοποιεί δημοσκόπηση (): Ενημερώθηκε η γάτα ArrayBlockingQueue: () 

put () και take () Μέθοδος

Σε διαδικασίες πολλαπλών νημάτων, μπορούμε να χρησιμοποιήσουμε put()και take()να αποκλείσουμε τη λειτουργία ενός νήματος για να το συγχρονίσουμε με ένα άλλο νήμα. Αυτές οι μέθοδοι θα περιμένουν έως ότου μπορούν να εκτελεστούν με επιτυχία.

μέθοδος put ()

Για να προσθέσετε ένα στοιχείο στο τέλος μιας ουράς αποκλεισμού πίνακα, μπορούμε να χρησιμοποιήσουμε τη put()μέθοδο.

Εάν η ουρά αποκλεισμού συστοιχιών είναι πλήρης, περιμένει έως ότου υπάρχει χώρος στην ουρά αποκλεισμού συστοιχιών για να προσθέσετε ένα στοιχείο.

Για παράδειγμα,

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

Παραγωγή

 ArrayBlockingQueue: (Σκύλος, γάτα) 

Εδώ, η put()μέθοδος μπορεί να ρίξει InterruptedExceptionαν διακοπεί κατά την αναμονή. Ως εκ τούτου, πρέπει να το περικλείσουμε μέσα σε ένα μπλοκ δοκιμής… catch.

take () Μέθοδος

Για να επιστρέψετε και να αφαιρέσετε ένα στοιχείο από το μπροστινό μέρος της ουράς αποκλεισμού πίνακα, μπορούμε να χρησιμοποιήσουμε τη take()μέθοδο.

Εάν η ουρά αποκλεισμού συστοιχιών είναι κενή, περιμένει μέχρι να διαγραφούν στοιχεία στην ουρά αποκλεισμού συστοιχιών.

Για παράδειγμα,

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

Παραγωγή

 ArrayBlockingQueue: (Σκύλος, γάτα) Στοιχείο που αφαιρέθηκε: Σκύλος 

Εδώ, η take()μέθοδος θα ρίξει ένα InterrupedExceptionαν διακοπεί κατά την αναμονή. Ως εκ τούτου, πρέπει να το κλείσουμε μέσα σε ένα try… catchμπλοκ.

Άλλες μέθοδοι

Μέθοδοι Περιγραφές
contains(element) Αναζητά την ουρά αποκλεισμού πίνακα για το καθορισμένο στοιχείο true. Εάν βρεθεί το στοιχείο, επιστρέφει , αν όχι επιστρέφει false.
size() Επιστρέφει το μήκος της ουράς αποκλεισμού πίνακα.
toArray() Μετατρέπει την ουρά αποκλεισμού συστοιχιών σε πίνακα και την επιστρέφει.
toString() Μετατρέπει την ουρά αποκλεισμού συστοιχιών σε συμβολοσειρά

Γιατί να χρησιμοποιήσετε το ArrayBlockingQueue;

Οι ArrayBlockingQueueχρήσεις ντύνει όπως τον εσωτερικό χώρο αποθήκευσης του.

Θεωρείται ως ασφαλής συλλογή νήματος . Ως εκ τούτου, χρησιμοποιείται γενικά σε εφαρμογές πολλαπλών νημάτων.

Ας υποθέσουμε ότι ένα νήμα εισάγει στοιχεία στην ουρά και ένα άλλο νήμα αφαιρεί στοιχεία από την ουρά.

Τώρα, εάν το πρώτο νήμα είναι πιο αργό από το δεύτερο νήμα, τότε η ουρά αποκλεισμού συστοιχιών μπορεί να κάνει το δεύτερο νήμα να περιμένει έως ότου το πρώτο νήμα ολοκληρώσει τη λειτουργία του.

ενδιαφέροντα άρθρα...