Класс LinkedBlockingQueue<E>
- Type Parameters:
-
E- тип элементов, хранящихся в этой очереди
- Все реализуемые интерфейсы:
-
Serializable,Iterable<E>,Collection<E>,BlockingQueue<E>,Queue<E>
public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
Необязательный параметр ограниченной вместимости конструктора служит способом предотвращения чрезмерного расширения очереди. Вместимость, если она не указана, равна Integer.MAX_VALUE. Связанные узлы динамически создаются при каждой вставке, если это не приведет к превышению вместимости очереди.
Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.
Этот класс является членом Java Collections Framework.
- Since:
- 1.5
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
LinkedBlockingQueue() |
Создает LinkedBlockingQueue с вместимостью Integer.MAX_VALUE. |
LinkedBlockingQueue |
Создает LinkedBlockingQueue с заданной (фиксированной) вместимостью. |
LinkedBlockingQueue |
Создает LinkedBlockingQueue с вместимостью Integer.MAX_VALUE, изначально содержащую элементы заданного набора, добавленные в порядке обхода итератора набора. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
clear() |
Атомарно удаляет все элементы из этой очереди. |
boolean |
contains |
Возвращает true, если эта очередь содержит указанный элемент. |
int |
drainTo |
Удаляет все доступные элементы из этой очереди и добавляет их в заданный набор. |
int |
drainTo |
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданный набор. |
void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока все элементы не будут обработаны или действие не выбросит исключение. |
Iterator<E> |
iterator() |
Возвращает итератор по элементам в этой очереди в правильной последовательности. |
boolean |
offer |
Вставляет указанный элемент в хвост этой очереди, если это возможно сделать немедленно, не превысив вместимость очереди, возвращает true при успехе и false если эта очередь заполнена. |
boolean |
offer |
Вставляет указанный элемент в хвост этой очереди, ожидая, если необходимо, в течение указанного времени ожидания, пока освободится место. |
E |
peek() |
Извлекает, но не удаляет, голову этой очереди или возвращает null если эта очередь пуста. |
E |
poll() |
Извлекает и удаляет голову этой очереди или возвращает null если эта очередь пуста. |
E |
poll |
Извлекает и удаляет голову этой очереди, ожидая в случае необходимости до указанного времени ожидания, пока элемент не станет доступным. |
void |
put |
Вставляет указанный элемент в хвост этой очереди, ожидая, если необходимо, пока освободится место. |
int |
remainingCapacity() |
Возвращает количество дополнительных элементов, которые эта очередь может в идеале (в отсутствие ограничений памяти или ресурсов) принять без блокировки. |
boolean |
remove |
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean |
removeAll |
Удаляет все элементы этого набора, которые также содержатся в заданном наборе (необязательная операция). |
boolean |
removeIf |
Удаляет все элементы этого набора, которые удовлетворяют заданному предикату. |
boolean |
retainAll |
Сохраняет только элементы в этом наборе, которые содержатся в заданном наборе (необязательная операция). |
int |
size() |
Возвращает количество элементов в этой очереди. |
Spliterator<E> |
spliterator() |
Возвращает Spliterator по элементам в этой очереди. |
E |
take() |
Извлекает и удаляет голову этой очереди, ожидая, если необходимо, до тех пор, пока элемент не станет доступным. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип возвращаемого массива — тип указанного массива. |
Методы, объявленные в классе java.util.AbstractQueue
add, addAll, element, remove
Методы, объявленные в классе java.util.AbstractCollection
containsAll, isEmpty, toString
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.util.concurrent.BlockingQueue
add
Методы, объявленные в интерфейсе java.util.Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray
Подробное описание конструкторов
LinkedBlockingQueue
public LinkedBlockingQueue()
LinkedBlockingQueue с ёмкостью Integer.MAX_VALUE.LinkedBlockingQueue
public LinkedBlockingQueue(int capacity)
LinkedBlockingQueue с заданной (фиксированной) ёмкостью.- Параметры:
-
capacity- ёмкость этой очереди - Исключения:
-
IllegalArgumentException- еслиcapacityне больше нуля
LinkedBlockingQueue
public LinkedBlockingQueue(Collection<? extends E> c)
LinkedBlockingQueue с ёмкостью Integer.MAX_VALUE, которая изначально содержит элементы заданного набора, добавленные в порядке обхода итератора набора.- Параметры:
-
c- набор элементов, которые изначально должны содержаться - Исключения:
-
NullPointerException- если указанный набор или любой из его элементов равны null
Подробное описание методов
size
public int size()
- Определено в:
-
sizeв интерфейсеCollection<E> - Возвращает:
- количество элементов в этой очереди
remainingCapacity
public int remainingCapacity()
size этой очереди. Обратите внимание, что вы не всегда можете определить, будет ли попытка вставить элемент успешной, посмотрев на remainingCapacity, так как может быть случай, когда другой поток в данный момент вставляет или удаляет элемент.
- Определено в:
-
remainingCapacityв интерфейсеBlockingQueue<E> - Возвращает:
- оставшуюся ёмкость
put
public void put(E e) throws InterruptedException
- Определено в:
-
putв интерфейсеBlockingQueue<E> - Параметры:
-
e- элемент для добавления - Исключения:
-
InterruptedException- если прервано ожидание -
NullPointerException- если указанный элемент равен null
offer
public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
- Определено в:
-
offerв интерфейсеBlockingQueue<E> - Параметры:
-
e- элемент для добавления -
timeout- время ожидания, прежде чем отказаться, в единицахunit -
unit- объектTimeUnit, определяющий, как интерпретировать параметрtimeout - Возвращает:
-
trueесли успешно, илиfalseесли заданное время ожидания истекло, прежде чем освободилось место - Исключения:
-
InterruptedException- если прервано ожидание -
NullPointerException- если указанный элемент равен null
offer
public boolean offer(E e)
true при успехе и false если эта очередь полна. При использовании очереди с ограниченной ёмкостью этот метод, как правило, предпочтительнее метода add, который может не вставить элемент, только если бросить исключение.- Определено в:
-
offerв интерфейсеBlockingQueue<E> - Определено в:
-
offerв интерфейсеQueue<E> - Параметры:
-
e- элемент для добавления - Возвращает:
-
trueесли элемент был добавлен в эту очередь, в противном случаеfalse - Исключения:
-
NullPointerException- если указанный элемент равен null
take
public E take() throws InterruptedException
BlockingQueue- Определено в:
-
takeв интерфейсеBlockingQueue<E> - Возвращает:
- голову этой очереди
- Исключения:
-
InterruptedException- если прервано ожидание
poll
public E poll(long timeout, TimeUnit unit) throws InterruptedException
BlockingQueue- Определено в:
-
pollв интерфейсеBlockingQueue<E> - Параметры:
-
timeout- время ожидания, прежде чем отказаться, в единицахunit -
unit- объектTimeUnit, определяющий, как интерпретировать параметрtimeout - Возвращает:
- голову этой очереди или
nullесли заданное время ожидания истекло, прежде чем появился элемент - Исключения:
-
InterruptedException- если прервано ожидание
poll
public E poll()
Queuenull если эта очередь пуста.- Определено в:
-
pollв интерфейсеQueue<E> - Возвращает:
- голову этой очереди или
nullесли эта очередь пуста
peek
public E peek()
Queuenull если эта очередь пуста.- Определено в:
-
peekв интерфейсеQueue<E> - Возвращает:
- голову этой очереди или
nullесли эта очередь пуста
remove
public boolean remove(Object o)
e, такой, что o.equals(e), если эта очередь содержит один или несколько таких элементов. Возвращает true если эта очередь содержала указанный элемент (или эквивалентно, если эта очередь изменилась в результате вызова).- Определено в:
-
removeв интерфейсеBlockingQueue<E> - Определено в:
-
removeв интерфейсеCollection<E> - Переопределяет:
-
removeв классеAbstractCollection<E> - Параметры:
-
o- элемент, который нужно удалить из этой очереди, если он присутствует - Возвращает:
-
trueесли эта очередь изменилась в результате вызова
contains
public boolean contains(Object o)
true если эта очередь содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда эта очередь содержит как минимум один элемент e, такой, что o.equals(e). - Определено в:
-
containsв интерфейсеBlockingQueue<E> - Определено в:
-
containsв интерфейсеCollection<E> - Переопределяет:
-
containsв классеAbstractCollection<E> - Параметры:
-
o- объект, который нужно проверить на наличие в этой очереди - Возвращает:
-
trueесли эта очередь содержит указанный элемент
toArray
public Object[] toArray()
Возвращаемый массив будет "безопасным" в том смысле, что к нему не сохраняются ссылки из этой очереди. (Другими словами, этот метод должен выделять новый массив). Таким образом, вызывающая сторона свободна изменять возвращаемый массив.
Этот метод служит мостом между API на основе массивов и API на основе коллекций.
- Определено в:
-
toArrayв интерфейсеCollection<E> - Переопределяет:
-
toArrayв классеAbstractCollection<E> - Возвращает:
- массив, содержащий все элементы этой очереди
toArray
public <T> T[] toArray(T[] a)
Если эта очередь помещается в указанный массив с избытком места (т. е. массив имеет больше элементов, чем эта очередь), элемент в массиве непосредственно после конца очереди устанавливается в null.
Как и метод toArray(), этот метод служит мостом между массивоориентированными и коллекционноориентированными API. Кроме того, этот метод позволяет точно управлять типом возвращаемого массива и в некоторых случаях может использоваться для экономии расходов на выделение памяти.
Предположим, что x — это очередь, известно, что она содержит только строки. Следующий код может быть использован для выгрузки очереди в новый выделенный массив String:
String[] y = x.toArray(new String[0]); Обратите внимание, что toArray(new Object[0]) идентичен по функции toArray().- Specified by:
-
toArrayв интерфейсеCollection<E> - Overrides:
-
toArrayв классеAbstractCollection<E> - Type Parameters:
-
T- тип компонента массива, содержащего коллекцию - Parameters:
-
a- массив, в который должны быть помещены элементы очереди, если он достаточно большой; в противном случае для этой цели выделяется новый массив того же типа - Returns:
- массив, содержащий все элементы этой очереди
- Throws:
-
ArrayStoreException- если тип runtime указанного массива не является супертипом типа runtime каждого элемента в этой очереди -
NullPointerException- если указанный массив null
clear
public void clear()
- Specified by:
-
clearв интерфейсеCollection<E> - Overrides:
-
clearв классеAbstractQueue<E>
drainTo
public int drainTo(Collection<? super E> c)
BlockingQueuec, может привести к тому, что элементы будут находиться ни в одной, ни в той, ни в другой, ни в обеих коллекциях, когда будет выброшено связанное исключение. Попытки слить очередь в себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции.- Specified by:
-
drainToв интерфейсеBlockingQueue<E> - Parameters:
-
c- коллекция, в которую нужно перенести элементы - Returns:
- количество перенесённых элементов
- Throws:
-
UnsupportedOperationException- если добавление элементов не поддерживается заданной коллекцией -
ClassCastException- если класс элемента этой очереди не позволяет добавить его в указанную коллекцию -
NullPointerException- если указанная коллекция null -
IllegalArgumentException- если указанная коллекция — это эта очередь, или какое-либо свойство элемента этой очереди мешает добавлению в указанную коллекцию
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueuec, может привести к тому, что элементы будут находиться ни в одной, ни в той, ни в другой, ни в обеих коллекциях, когда будет выброшено связанное исключение. Попытки слить очередь в себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции.- Specified by:
-
drainToв интерфейсеBlockingQueue<E> - Parameters:
-
c- коллекция, в которую нужно перенести элементы -
maxElements- максимальное количество элементов для переноса - Returns:
- количество перенесённых элементов
- Throws:
-
UnsupportedOperationException- если добавление элементов не поддерживается заданной коллекцией -
ClassCastException- если класс элемента этой очереди не позволяет добавить его в указанную коллекцию -
NullPointerException- если указанная коллекция null -
IllegalArgumentException- если указанная коллекция — это эта очередь, или какое-либо свойство элемента этой очереди мешает добавлению в указанную коллекцию
iterator
public Iterator<E> iterator()
Возвращаемый итератор слабо согласован.
- Specified by:
-
iteratorв интерфейсеCollection<E> - Specified by:
-
iteratorв интерфейсеIterable<E> - Specified by:
-
iteratorв классеAbstractCollection<E> - Returns:
- итератор по элементам в этой очереди в правильной последовательности
spliterator
public Spliterator<E> spliterator()
Spliterator по элементам в этой очереди. Возвращаемый разделитель слабо согласован.
Разделитель Spliterator сообщает о Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.
- Specified by:
-
spliteratorв интерфейсеCollection<E> - Specified by:
-
spliteratorв интерфейсеIterable<E> - Implementation Note:
SpliteratorреализуетtrySplitдля поддержки ограниченного параллелизма.- Returns:
Spliteratorпо элементам в этой очереди- Since:
- 1.8
forEach
public void forEach(Consumer<? super E> action)
IterableIterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение. Действия выполняются в порядке итерации, если этот порядок указан. Исключение, выброшенное действием, передаётся вызывающему методу. Поведение этого метода не определено, если действие производит побочные эффекты, которые изменяют базовый источник элементов, если только переопределяемый класс не указал политику одновременного изменения.
- Specified by:
-
forEachв интерфейсеIterable<E> - Parameters:
-
action- действие, которое должно выполняться для каждого элемента - Throws:
-
NullPointerException- если заданное действие null
removeIf
public boolean removeIf(Predicate<? super E> filter)
Collection- Specified by:
-
removeIfв интерфейсеCollection<E> - Parameters:
-
filter- предикат, возвращающийtrueдля удаляемых элементов - Returns:
-
trueесли какие-либо элементы были удалены - Throws:
-
NullPointerException- если указанный фильтр null
removeAll
public boolean removeAll(Collection<?> c)
AbstractCollection- Specified by:
-
removeAllв интерфейсеCollection<E> - Overrides:
-
removeAllв классеAbstractCollection<E> - Parameters:
-
c- коллекция, содержащая элементы, которые необходимо удалить из этой коллекции - Returns:
-
trueесли эта коллекция изменилась в результате вызова - Throws:
-
NullPointerException- если эта коллекция содержит один или несколько элементов null, а указанная коллекция не поддерживает элементы null (необязательно), или если указанная коллекция null - See Also:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Определено в:
-
retainAllв интерфейсеCollection<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c- набор, содержащий элементы, которые должны быть сохранены в этом наборе - Возвращает:
-
trueесли этот набор изменился в результате вызова - Исключения:
-
NullPointerException- если этот набор содержит один или несколько нулевых элементов, а указанный набор не допускает нулевых элементов (необязательно), или если указанный набор равен null - См. также:
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/LinkedBlockingQueue.html