Класс 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
- См. также:
- Serialized Form
Конструкторы
| Конструктор и описание |
|---|
LinkedBlockingQueue() Создаёт очередь |
LinkedBlockingQueue(Collection<? extends E> c) Создаёт очередь |
LinkedBlockingQueue(int capacity) Создаёт очередь |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
clear() Атомарно удаляет все элементы из этой очереди. |
boolean |
contains(Object o) Возвращает |
int |
drainTo(Collection<? super E> c) Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. |
int |
drainTo(Collection<? super E> c,
int maxElements) Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию. |
Iterator<E> |
iterator() Возвращает итератор по элементам в этой очереди в правильной последовательности. |
boolean |
offer(E e) Вставляет указанный элемент в конец этой очереди, если это возможно сделать немедленно без превышения емкости очереди, возвращая |
boolean |
offer(E e,
long timeout,
TimeUnit unit) Вставляет указанный элемент в конец этой очереди, ожидая, если необходимо, до указанного времени ожидания, пока не освободится место. |
E |
peek() Возвращает, но не удаляет, голову этой очереди или возвращает |
E |
poll() Возвращает и удаляет голову этой очереди или возвращает |
E |
poll(long timeout,
TimeUnit unit) Возвращает и удаляет голову этой очереди, ожидая, если необходимо, до указанного времени ожидания, пока элемент не станет доступным. |
void |
put(E e) Вставляет указанный элемент в конец этой очереди, ожидая, если необходимо, пока не освободится место. |
int |
remainingCapacity() Возвращает количество дополнительных элементов, которые эта очередь может идеологически (в отсутствие ограничений по памяти или ресурсам) принять без блокировки. |
boolean |
remove(Object o) Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. |
int |
size() Возвращает количество элементов в этой очереди. |
Spliterator<E> |
spliterator() Возвращает |
E |
take() Возвращает и удаляет голову этой очереди, ожидая, если необходимо, пока элемент не станет доступным. |
Object[] |
toArray() Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности. |
<T> T[] |
toArray(T[] a) Возвращает массив, содержащий все элементы в этой очереди в правильной последовательности; тип времени выполнения возвращаемого массива соответствует типу указанного массива. |
String |
toString() Возвращает строковое представление этой коллекции. |
Методы, унаследованные от класса java.util.AbstractQueue
add, addAll, element, remove Методы, унаследованные от класса java.util.AbstractCollection
containsAll, isEmpty, removeAll, retainAll Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Методы, унаследованные от интерфейса java.util.concurrent.BlockingQueue
add Методы, унаследованные от интерфейса java.util.Queue
element, remove Методы, унаследованные от интерфейса java.util.Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, stream Методы, унаследованные от интерфейса java.lang.Iterable
forEach Конструкторы
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> - Определено в:
-
sizeв классеAbstractCollection<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()
Описание скопировано из интерфейса: Queue
Извлекает и удаляет голову этой очереди или возвращает null если эта очередь пуста.
- Определено в:
-
pollв интерфейсеQueue<E> - Возвращает:
- голова этой очереди или
nullесли эта очередь пуста
peek
public E peek()
Описание скопировано из интерфейса: Queue
Извлекает, но не удаляет, голову этой очереди или возвращает null если эта очередь пуста.
- Определено в:
-
peekв интерфейсеQueue<E> - Возвращает:
- голова этой очереди или
nullесли эта очередь пуста
remove
public boolean remove(Object o)
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. Более формально, удаляет элемент e такой, что o.equals(e), если эта очередь содержит один или более таких элементов. Возвращает true если эта очередь содержала указанный элемент (или эквивалентно, если эта очередь изменилась в результате вызова).
- Определено в:
-
removeв интерфейсеCollection<E> - Определено в:
-
removeв интерфейсеBlockingQueue<E> - Переопределяет:
-
removeв классеAbstractCollection<E> - Параметры:
-
o- элемент, который нужно удалить из этой очереди, если он присутствует - Возвращает:
-
trueесли эта очередь изменилась в результате вызова
contains
public boolean contains(Object o)
Возвращает true если эта очередь содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда эта очередь содержит по меньшей мере один элемент e такой, что o.equals(e).
- Определено в:
-
containsв интерфейсеCollection<E> - Определено в:
-
containsв интерфейсеBlockingQueue<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
toString
public String toString()
Описание скопировано из класса: AbstractCollection
Возвращает строковое представление этой коллекции. Строковое представление состоит из списка элементов коллекции в порядке их возвращения итератором, заключенными в квадратные скобки ("[]"). Смежные элементы разделены символами ", " (запятая и пробел). Элементы преобразуются в строки как в String.valueOf(Object).
- Переопределяет:
-
toStringв классеAbstractCollection<E> - Возвращает:
- строковое представление этой коллекции
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в интерфейсеIterable<E> - Указано в:
-
iteratorв интерфейсеCollection<E> - Указано в:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам в этой очереди в правильном порядке
spliterator
public Spliterator<E> spliterator()
Возвращает Spliterator по элементам в этой очереди.
Возвращаемый спитератор слабо согласован.
Этот Spliterator сообщает Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.
- Указано в:
-
spliteratorв интерфейсеIterable<E> - Указано в:
-
spliteratorв интерфейсеCollection<E> - Примечание реализации:
- Этот
SpliteratorреализуетtrySplitдля разрешения ограниченной параллельности. - Возвращает:
Spliteratorпо элементам в этой очереди- С:
- 1.8
© 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.