Руководство Java ArrayBlockingQueue
1. ArrayBlockingQueue
ArrayBlockingQueue<E> - это класс, который реализует интерфейс BlockingQueue<E>, поэтому он обладает всеми функциями этого интерфейса. Смотрите статью о BlockingQueue для лучшего понимания с основными примерами.
public class ArrayBlockingQueue<E> extends AbstractQueue<E>
implements BlockingQueue<E>, java.io.Serializable
- Collection
- BlockingQueue
- Queue
ArrayBlockingQueue - это очередь с ограниченной емкостью, которая содержит внутренний массив фиксированной длины для хранения элементов. Эта очередь сортирует элементы в соответствии с правилом FIFO - First In First Out (первым вошел первым вышел). Элементы в начале очереди - это элементы, которые находились в очереди дольше всего, элементы в конце очереди - это недавно добавленные элементы.
На следующем рисунке показано, как ArrayBlockingQueue сохраняет свои элементы во внутреннем массиве.
- Добавление нового элемента в эту очередь соответствует присвоению нового значения элементу массива в putIndex. Кроме того, если putIndex равен 0, он будет присвоен arrayLength-1, в противном случае ему будет присвоен putIndex-1.
- Извлечение элемента из этой очереди соответствует возвращению элемента массива в takeIndex. Кроме того, если takeIndex равен 0, ему будет присвоена arrayLength-1, в противном случае ему будет takeIndex-1.
ArrayBlockingQueue поддерживает справедливую политику в качестве опции при создании объектов. Как только политика справедливости будет использована, эта очередь будет соответствовать порядку, в котором ожидают потоки Producer и Consumer. Это позволяет избежать истощения определенного thread, такого как голодающий thread Consumer из-за длительного времени ожидания без получения какого-либо элемента из очереди.
ArrayBlockingQueue и его Iterator поддерживают все дополнительные методы, определенные в интерфейсах Collection и Iterator.
- Iterator
- Collection
2. Constructors
Конструкторы класса ArrayBlockingQueue:
public ArrayBlockingQueue(int capacity)
public ArrayBlockingQueue(int capacity, boolean fair)
public ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)
3. ArrayBlockingQueue(int)
public ArrayBlockingQueue(int capacity)
Создает объект ArrayBlockingQueue с указанной (фиксированной) емкостью. Использование этого конструктора эквивалентно использованию конструктора ArrayBlockingQueue(capacity,false).
"Справедливая" политика не применяется к объекту ArrayBlockingQueue, созданному этим конструктором, поведение которого не определено.
4. ArrayBlockingQueue(int, boolean)
public ArrayBlockingQueue(int capacity, boolean fair)
Создает объект ArrayBlockingQueue с заданной (фиксированной) емкостью, с заданной "справедливой" политикой.
fair = true
К этой очереди будет применена "справедливая" политика, которая учитывает порядок, в котором thread Producer и Consumer ожидают в соответствии с правилами FIFO, это означает, что thread, который ожидает первым, будет обработан первым.
"Справедливая" политика помогает избежать истощения определенного thread, например, Consumer долго ждет, но не получает никаких элементов из очереди.
fair = false
"Справедливая" политика не применяется, порядок обработки thread не определен
5. ArrayBlockingQueue(int, boolean, Collection)
public ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)
Создает объект ArrayBlockingQueue с указанной (фиксированной) емкостью, указанной "справедливой" политикой и предоставленными начальными элементами.
Например:
Collection<String> initialElements = List.of("A", "B", "C");
BlockingQueue<String> queue = new ArrayBlockingQueue<>(10, true, initialElements);
6. Methods
Методы, унаследованные от интерфейса BockingQueue<E>:
void put(E e) throws InterruptedException;
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;
E take() throws InterruptedException;
E poll(long timeout, TimeUnit unit) throws InterruptedException;
int remainingCapacity();
int drainTo(Collection<? super E> c);
int drainTo(Collection<? super E> c, int maxElements);
Смотрите статью о BlockingQueue, чтобы узнать, как использовать описанные выше методы.
Методы, унаследованные от интерфейса Queue<E>:
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
Методы унаследованы от интерфейса Collection<E>:
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();
Object[] toArray();
<T> T[] toArray(T[] a);
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
void clear();
boolean equals(Object o);
int hashCode();
default <T> T[] toArray(IntFunction<T[]> generator)
default boolean removeIf(Predicate<? super E> filter)
default Spliterator<E> spliterator()
default Stream<E> stream()
default Stream<E> parallelStream()
- Руководство Java Collection
- Руководство Java Iterator
Руководства Java Collections Framework
- Руководство Java PriorityBlockingQueue
- Руководство Java Collections Framework
- Руководство Java SortedSet
- Руководство Java List
- Руководство Java Iterator
- Руководство Java NavigableSet
- Руководство Java ListIterator
- Руководство Java ArrayList
- Руководство Java CopyOnWriteArrayList
- Руководство Java LinkedList
- Руководство Java Set
- Руководство Java TreeSet
- Руководство Java CopyOnWriteArraySet
- Руководство Java Queue
- Руководство Java Deque
- Руководство Java IdentityHashMap
- Руководство Java WeakHashMap
- Руководство Java Map
- Руководство Java SortedMap
- Руководство Java NavigableMap
- Руководство Java HashMap
- Руководство Java TreeMap
- Руководство Java PriorityQueue
- Руководство Java BlockingQueue
- Руководство Java ArrayBlockingQueue
- Руководство Java TransferQueue
Show More