Класс LinkedBlockingQueue<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- java.util.concurrent.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
Неограниченная (по желанию) очередь блокирования, основанная на связанных узлах. Эта очередь упорядочивает элементы по принципу FIFO (первым вошел, первым вышел). Голова очереди — это элемент, который находится в очереди дольше всего. Хвост очереди — это элемент, который находится в очереди меньше всего времени. Новые элементы вставляются в хвост очереди, а операции извлечения из очереди получают элементы в голове очереди. Очереди, основанные на связанных узлах, обычно имеют более высокую производительность, чем очереди на основе массивов, но в большинстве конкурентных приложений их производительность менее предсказуема.
Необязательный параметр ограничения по емкости конструктора служит для предотвращения чрезмерного расширения очереди. Емкость, если она не указана, равна Integer.MAX_VALUE. Связанные узлы динамически создаются при каждой вставке, если это не приведет к превышению емкости очереди.
Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.
Этот класс является членом Java Collections Framework.
- С тех пор:
- 1.5
- См. также:
- Сериализованная форма
Конструкторы
| Конструктор | Описание |
|---|---|
LinkedBlockingQueue() | Создает |
LinkedBlockingQueue(int capacity) | Создает |
LinkedBlockingQueue(Collection<? extends E> c) | Создает |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | clear() | Атомарно удаляет все элементы из этой очереди. |
boolean | contains(Object o) | Возвращает |
int | drainTo(Collection<? super E> c) | Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. |
int | drainTo(Collection<? super E> c,
int maxElements) | Удаляет не более заданного числа доступных элементов из этой очереди и добавляет их в заданную коллекцию. |
void | forEach(Consumer<? super E> action) | Выполняет заданное действие для каждого элемента |
Iterator<E> | iterator() | Возвращает итератор над элементами в этой очереди в правильной последовательности. |
boolean | offer(E e) | Вставляет указанный элемент в хвост этой очереди, если это возможно сделать немедленно без превышения емкости очереди, возвращая |
boolean | offer(E e,
long timeout,
TimeUnit unit) | Вставляет указанный элемент в хвост этой очереди, ожидая, если необходимо, до заданного времени ожидания, пока освободится место. |
void | put(E e) | Вставляет указанный элемент в хвост этой очереди, ожидая, если необходимо, пока освободится место. |
int | remainingCapacity() | Возвращает количество дополнительных элементов, которые эта очередь может в идеале (в отсутствие ограничений памяти или ресурсов) принять без блокировки. |
boolean | remove(Object o) | Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean | removeAll(Collection<?> c) | Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). |
boolean | removeIf(Predicate<? super E> filter) | Удаляет все элементы этой коллекции, которые удовлетворяют заданному предикату. |
boolean | retainAll(Collection<?> c) | Сохраняет только элементы в этой коллекции, которые содержатся в заданной коллекции (необязательная операция). |
int | size() | Возвращает количество элементов в этой очереди. |
Spliterator<E> | spliterator() | Возвращает |
Object[] | toArray() | Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности. |
<T> T[] | toArray(T[] a) | Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип времени выполнения возвращаемого массива соответствует типу указанного массива. |
Методы, объявленные в классе 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, poll, take Методы, объявленные в интерфейсе java.util.Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray Методы, объявленные в интерфейсе java.util.Queue
element, peek, poll, remove Подробное описание конструкторов
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
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.
- Указано в:
-
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().- Указано в:
-
toArrayв интерфейсеCollection<E> - Переопределяет:
-
toArrayв классеAbstractCollection<E> - Параметры типа:
-
T- тип компонента массива для хранения коллекции - Параметры:
-
a- массив, в который должны быть помещены элементы очереди, если он достаточно большой; в противном случае для этой цели выделяется новый массив того же типа времени выполнения - Возвращает:
- массив, содержащий все элементы этой очереди
- Исключения:
-
ArrayStoreException- если тип времени выполнения указанного массива не является надтипом типа времени выполнения каждого элемента в этой очереди -
NullPointerException- если указанный массив имеет значение null
clear
public void clear()
Атомарно удаляет все элементы из этой очереди. Очередь будет пустой после возврата этого вызова.
- Указано в:
-
clearв интерфейсеCollection<E> - Переопределяет:
-
clearв классеAbstractQueue<E>
drainTo
public int drainTo(Collection<? super E> c)
Описание скопировано из интерфейса: BlockingQueue
Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. Эта операция может быть более эффективной, чем многократное опрошение этой очереди. Ошибка, возникшая при попытке добавить элементы в коллекцию c, может привести к тому, что элементы будут находиться ни в одной, ни в той, ни в другой, ни в обеих коллекциях при возникновении соответствующего исключения. Попытки слить очередь в себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция модифицируется во время выполнения операции.
- Указано в:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c- коллекция для переноса элементов - Возвращает:
- количество переданных элементов
- Исключения:
-
UnsupportedOperationException- если добавление элементов не поддерживается указанной коллекцией -
ClassCastException- если класс элемента этой очереди не позволяет добавить его в указанную коллекцию -
NullPointerException- если указанная коллекция имеет значение null -
IllegalArgumentException- если указанная коллекция является этой очередью или некоторые свойства элемента этой очереди препятствуют его добавлению в указанную коллекцию
drainTo
public int drainTo(Collection<? super E> c,
int maxElements) Описание скопировано из интерфейса: BlockingQueue
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию. Ошибка, возникшая при попытке добавить элементы в коллекцию c, может привести к тому, что элементы будут находиться ни в одной, ни в той, ни в другой, ни в обеих коллекциях при возникновении соответствующего исключения. Попытки слить очередь в себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция модифицируется во время выполнения операции.
- Указано в:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c- коллекция для переноса элементов -
maxElements- максимальное количество элементов для переноса - Возвращает:
- количество переданных элементов
- Исключения:
-
UnsupportedOperationException- если добавление элементов не поддерживается указанной коллекцией -
ClassCastException- если класс элемента этой очереди не позволяет добавить его в указанную коллекцию -
NullPointerException- если указанная коллекция имеет значение null -
IllegalArgumentException- если указанная коллекция является этой очередью или некоторые свойства элемента этой очереди препятствуют его добавлению в указанную коллекцию
iterator
public Iterator<E> iterator()
Возвращает итератор по элементам в этой очереди в правильном порядке. Элементы будут возвращены в порядке от первого (головка) до последнего (хвост).
Возвращаемый итератор является слабо согласованным.
- Указано в:
-
iteratorв интерфейсеCollection<E> - Указано в:
-
iteratorв интерфейсеIterable<E> - Указано в:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам в этой очереди в правильном порядке
spliterator
public Spliterator<E> spliterator()
Возвращает Spliterator по элементам в этой очереди.
Возвращаемый spliterator является слабо согласованным.
Spliterator сообщает о Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.
- Указано в:
-
spliteratorв интерфейсеCollection<E> - Указано в:
-
spliteratorв интерфейсеIterable<E> - Примечание реализации:
SpliteratorреализуетtrySplitдля ограничения параллелизма.- Возвращает:
Spliteratorпо элементам в этой очереди- С:
- 1.8
forEach
public void forEach(Consumer<? super E> action)
Описание скопировано из интерфейса: Iterable
Выполняет заданное действие для каждого элемента Iterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение. Действия выполняются в порядке итерации, если этот порядок указан. Исключение, брошенное действием, передается вызывающей стороне.
Поведение этого метода не определено, если действие производит побочные эффекты, которые изменяют исходный источник элементов, если класс, перезаписывающий метод, не указал политику одновременного изменения.
- Указано в:
-
forEachв интерфейсеIterable<E> - Параметры:
-
action- действие, которое должно быть выполнено для каждого элемента - Исключения:
-
NullPointerException- если указанное действие равно null
removeIf
public boolean removeIf(Predicate<? super E> filter)
Описание скопировано из интерфейса: Collection
Удаляет все элементы этого набора, удовлетворяющие заданному предикату. Ошибки или исключения времени выполнения, выброшенные во время итерации или предикатом, передаются вызывающей стороне.
- Указано в:
-
removeIfв интерфейсеCollection<E> - Параметры:
-
filter- предикат, возвращающийtrueдля удаляемых элементов - Возвращает:
-
trueесли какие-либо элементы были удалены - Исключения:
-
NullPointerException- если указанный фильтр равен null
removeAll
public boolean removeAll(Collection<?> c)
Описание скопировано из класса: AbstractCollection
Удаляет все элементы этого набора, которые также содержатся в указанном наборе (дополнительная операция). После возврата этого вызова этот набор не будет содержать общих элементов со специфицированным набором.
- Указано в:
-
removeAllв интерфейсеCollection<E> - Переопределяет:
-
removeAllв классеAbstractCollection<E> - Параметры:
-
c- набор, содержащий элементы, которые должны быть удалены из этого набора - Возвращает:
-
trueесли этот набор изменился в результате вызова - Исключения:
-
NullPointerException- если этот набор содержит один или несколько null-элементов, а указанный набор не поддерживает null-элементы (необязательно), или если указанный набор равен null - См. также:
-
AbstractCollection.remove(Object),AbstractCollection.contains(Object)
retainAll
public boolean retainAll(Collection<?> c)
Описание скопировано из класса: AbstractCollection
Сохраняет только элементы в этом наборе, которые содержатся в указанном наборе (необязательная операция). Другими словами, удаляет из этого набора все его элементы, которые не содержатся в указанном наборе.
- Указано в:
-
retainAllв интерфейсеCollection<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c- набор, содержащий элементы, которые должны сохраниться в этом наборе - Возвращает:
-
trueесли этот набор изменился в результате вызова - Исключения:
-
NullPointerException- если этот набор содержит один или несколько null-элементов, а указанный набор не допускает null-элементов (необязательно), или если указанный набор равен null - См. также:
-
AbstractCollection.remove(Object),AbstractCollection.contains(Object)
© 1993, 2020, 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/11/docs/api/java.base/java/util/concurrent/LinkedBlockingQueue.html