Интерфейс BlockingDeque<E>
- Параметры типа:
E
- Все суперинтерфейсы:
BlockingQueue<E>, Collection<E>, Deque<E>, Iterable<E>, Queue<E>, SequencedCollection<E>
- Все известные реализующие классы:
LinkedBlockingDeque
public interface BlockingDeque<E> extends BlockingQueue<E>, Deque<E>
Deque, которая также поддерживает блокирующие операции: при извлечении элемента они ожидают, пока очередь станет непустой, а при добавлении элемента — пока в очереди не появится свободное место. Методы BlockingDeque представлены в четырех формах, различающихся обработкой операций, которые нельзя выполнить немедленно, но можно выполнить позднее: первый метод выбрасывает исключение, второй возвращает специальное значение (либо null, либо false — в зависимости от операции), третий бесконечно блокирует текущий поток до тех пор, пока операцию не удастся выполнить, а четвертый блокирует поток только на заданный максимальный период времени, после чего прекращает ожидание. Эти методы приведены в следующей таблице:
| Первый элемент (голова) | ||||
|---|---|---|---|---|
| Выбрасывает исключение | Специальное значение | Блокирует | Ожидает до истечения времени | |
| Добавление | addFirst(e) | offerFirst(e) | putFirst(e) | offerFirst(e, time, unit) |
| Удаление | removeFirst() | pollFirst() | takeFirst() | pollFirst(time, unit) |
| Просмотр | getFirst() | peekFirst() | не применимо | не применимо |
| Последний элемент (хвост) | ||||
| Выбрасывает исключение | Специальное значение | Блокирует | Ожидает до истечения времени | |
| Добавление | addLast(e) | offerLast(e) | putLast(e) | offerLast(e, time, unit) |
| Удаление | removeLast() | pollLast() | takeLast() | pollLast(time, unit) |
| Просмотр | getLast() | peekLast() | не применимо | не применимо |
Как и любая BlockingQueue, BlockingDeque является потокобезопасной, не допускает нулевых элементов и может иметь ограничение по емкости (или не иметь его).
Реализацию BlockingDeque можно непосредственно использовать как FIFO-BlockingQueue. Методы, унаследованные от интерфейса BlockingQueue, в точности эквивалентны методам BlockingDeque, как показано в следующей таблице:
Метод BlockingQueue | Эквивалентный метод BlockingDeque | |
|---|---|---|
| Добавление | add(e) | addLast(e) |
offer(e) | offerLast(e) | |
put(e) | putLast(e) | |
offer(e, time, unit) | offerLast(e, time, unit) | |
| Удаление | remove() | removeFirst() |
poll() | pollFirst() | |
take() | takeFirst() | |
poll(time, unit) | pollFirst(time, unit) | |
| Просмотр | element() | getFirst() |
peek() | peekFirst() |
Эффекты согласованности памяти: как и в других параллельных коллекциях, действия в потоке, предшествующие помещению объекта в BlockingDeque, происходят до действий, следующих за обращением к этому элементу или его удалением из BlockingDeque в другом потоке.
Этот интерфейс является частью Java Collections Framework.
- Начиная с версии:
- 1.6
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Добавляет указанный элемент в очередь, представленную этой двусторонней очередью (иначе говоря, в ее хвост), если это можно сделать немедленно, не нарушая ограничений емкости; в случае успеха возвращает true, а если свободного места нет — выбрасывает IllegalStateException. |
void |
addFirst |
Добавляет указанный элемент в начало этой двусторонней очереди, если это можно сделать немедленно, не нарушая ограничений емкости; если свободного места нет, выбрасывает IllegalStateException. |
void |
addLast |
Добавляет указанный элемент в конец этой двусторонней очереди, если это можно сделать немедленно, не нарушая ограничений емкости; если свободного места нет, выбрасывает IllegalStateException. |
boolean |
contains |
Возвращает true, если эта двусторонняя очередь содержит указанный элемент. |
E |
element() |
Извлекает, но не удаляет голову очереди, представленной этой двусторонней очередью (иначе говоря, первый элемент этой двусторонней очереди). |
Iterator |
iterator() |
Возвращает итератор по элементам этой двусторонней очереди в правильном порядке. |
boolean |
offer |
Добавляет указанный элемент в очередь, представленную этой двусторонней очередью (иначе говоря, в ее хвост), если это можно сделать немедленно, не нарушая ограничений емкости; в случае успеха возвращает true, а если свободного места нет — false. |
boolean |
offer |
Добавляет указанный элемент в очередь, представленную этой двусторонней очередью (иначе говоря, в ее хвост), при необходимости ожидая освобождения места в течение указанного времени. |
boolean |
offerFirst |
Добавляет указанный элемент в начало этой двусторонней очереди, если это можно сделать немедленно, не нарушая ограничений емкости; в случае успеха возвращает true, а если свободного места нет — false. |
boolean |
offerFirst |
Добавляет указанный элемент в начало этой двусторонней очереди, при необходимости ожидая освобождения места в течение указанного времени. |
boolean |
offerLast |
Добавляет указанный элемент в конец этой двусторонней очереди, если это можно сделать немедленно, не нарушая ограничений емкости; в случае успеха возвращает true, а если свободного места нет — false. |
boolean |
offerLast |
Добавляет указанный элемент в конец этой двусторонней очереди, при необходимости ожидая освобождения места в течение указанного времени. |
E |
peek() |
Извлекает, но не удаляет голову очереди, представленной этой двусторонней очередью (иначе говоря, первый элемент этой двусторонней очереди), либо возвращает null, если двусторонняя очередь пуста. |
E |
poll() |
Извлекает и удаляет голову очереди, представленной этой двусторонней очередью (иначе говоря, первый элемент этой двусторонней очереди), либо возвращает null, если двусторонняя очередь пуста. |
E |
poll |
Извлекает и удаляет голову очереди, представленной этой двусторонней очередью (иначе говоря, первый элемент этой двусторонней очереди), при необходимости ожидая появления элемента в течение указанного времени. |
E |
pollFirst |
Извлекает и удаляет первый элемент этой двусторонней очереди, при необходимости ожидая появления элемента в течение указанного времени. |
E |
pollLast |
Извлекает и удаляет последний элемент этой двусторонней очереди, при необходимости ожидая появления элемента в течение указанного времени. |
void |
push |
Помещает элемент в стек, представленный этой двусторонней очередью (иначе говоря, в ее голову), если это можно сделать немедленно, не нарушая ограничений емкости; если свободного места нет, выбрасывает IllegalStateException. |
void |
put |
Добавляет указанный элемент в очередь, представленную этой двусторонней очередью (иначе говоря, в ее хвост), при необходимости ожидая освобождения места. |
void |
putFirst |
Добавляет указанный элемент в начало этой двусторонней очереди, при необходимости ожидая освобождения места. |
void |
putLast |
Добавляет указанный элемент в конец этой двусторонней очереди, при необходимости ожидая освобождения места. |
E |
remove() |
Извлекает и удаляет голову очереди, представленной этой двусторонней очередью (иначе говоря, первый элемент этой двусторонней очереди). |
boolean |
remove |
Удаляет первое вхождение указанного элемента из этой двусторонней очереди. |
boolean |
removeFirstOccurrence |
Удаляет первое вхождение указанного элемента из этой двусторонней очереди. |
boolean |
removeLastOccurrence |
Удаляет последнее вхождение указанного элемента из этой двусторонней очереди. |
int |
size() |
Возвращает количество элементов в этой двусторонней очереди. |
E |
take() |
Извлекает и удаляет голову очереди, представленной этой двусторонней очередью (иначе говоря, первый элемент этой двусторонней очереди), при необходимости ожидая появления элемента. |
E |
takeFirst() |
Извлекает и удаляет первый элемент этой двусторонней очереди, при необходимости ожидая появления элемента. |
E |
takeLast() |
Извлекает и удаляет последний элемент этой двусторонней очереди, при необходимости ожидая появления элемента. |
Методы, объявленные в интерфейсе BlockingQueue
drainTo, drainTo, remainingCapacity
Методы, объявленные в интерфейсе Collection
clear, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray, toArray
Методы, объявленные в интерфейсе Deque
addAll, descendingIterator, getFirst, getLast, peekFirst, peekLast, pollFirst, pollLast, pop, removeFirst, removeLast, reversed
Подробное описание методов
addFirst
void addFirst(E e)
IllegalStateException. При использовании дека с ограниченной вместимостью обычно предпочтительно использовать offerFirst.- Определено в:
-
addFirstв интерфейсеDeque<E> - Определено в:
-
addFirstв интерфейсеSequencedCollection<E> - Параметры:
-
e— добавляемый элемент - Исключения:
-
IllegalStateException— если элемент невозможно добавить в данный момент из-за ограничений вместимости -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
addLast
void addLast(E e)
IllegalStateException. При использовании дека с ограниченной вместимостью обычно предпочтительно использовать offerLast.- Определено в:
-
addLastв интерфейсеDeque<E> - Определено в:
-
addLastв интерфейсеSequencedCollection<E> - Параметры:
-
e— добавляемый элемент - Исключения:
-
IllegalStateException— если элемент невозможно добавить в данный момент из-за ограничений вместимости -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
offerFirst
boolean offerFirst(E e)
true, а если свободного места нет — false. При использовании дека с ограниченной вместимостью обычно предпочтительнее этот метод, чем метод addFirst, который может завершиться неудачей при вставке элемента только с выбрасыванием исключения.- Определено в:
-
offerFirstв интерфейсеDeque<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true, если элемент добавлен в этот дек, иначеfalse - Исключения:
-
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
offerLast
boolean offerLast(E e)
true, а если свободного места нет — false. При использовании дека с ограниченной вместимостью обычно предпочтительнее этот метод, чем метод addLast, который может завершиться неудачей при вставке элемента только с выбрасыванием исключения.- Определено в:
-
offerLastв интерфейсеDeque<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true, если элемент добавлен в этот дек, иначеfalse - Исключения:
-
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
putFirst
void putFirst(E e) throws InterruptedException
- Параметры:
-
e— добавляемый элемент - Исключения:
-
InterruptedException— если поток был прерван во время ожидания -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
putLast
void putLast(E e) throws InterruptedException
- Параметры:
-
e— добавляемый элемент - Исключения:
-
InterruptedException— если поток был прерван во время ожидания -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
offerFirst
boolean offerFirst(E e, long timeout, TimeUnit unit) throws InterruptedException
- Параметры:
-
e— добавляемый элемент -
timeout— время ожидания до прекращения попыток, в единицахunit -
unit— объектTimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
-
trueпри успешном выполнении илиfalse, если указанное время ожидания истекло до появления свободного места - Исключения:
-
InterruptedException— если поток был прерван во время ожидания -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
offerLast
boolean offerLast(E e, long timeout, TimeUnit unit) throws InterruptedException
- Параметры:
-
e— добавляемый элемент -
timeout— время ожидания до прекращения попыток, в единицахunit -
unit— объектTimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
-
trueпри успешном выполнении илиfalse, если указанное время ожидания истекло до появления свободного места - Исключения:
-
InterruptedException— если поток был прерван во время ожидания -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
takeFirst
E takeFirst() throws InterruptedException
- Возвращает:
- голову этого дека
- Исключения:
-
InterruptedException— если поток был прерван во время ожидания
takeLast
E takeLast() throws InterruptedException
- Возвращает:
- хвост этого дека
- Исключения:
-
InterruptedException— если поток был прерван во время ожидания
pollFirst
E pollFirst(long timeout, TimeUnit unit) throws InterruptedException
- Параметры:
-
timeout— время ожидания до прекращения попыток, в единицахunit -
unit— объектTimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
- голову этого дека или
null, если указанное время ожидания истекло до появления элемента - Исключения:
-
InterruptedException— если поток был прерван во время ожидания
pollLast
E pollLast(long timeout, TimeUnit unit) throws InterruptedException
- Параметры:
-
timeout— время ожидания до прекращения попыток, в единицахunit -
unit— объектTimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
- хвост этого дека или
null, если указанное время ожидания истекло до появления элемента - Исключения:
-
InterruptedException— если поток был прерван во время ожидания
removeFirstOccurrence
boolean removeFirstOccurrence(Object o)
e, такой что o.equals(e) (если такой элемент существует). Возвращает true, если этот дек содержал указанный элемент (или, что эквивалентно, если в результате вызова дек изменился).- Определено в:
-
removeFirstOccurrenceв интерфейсеDeque<E> - Параметры:
-
o— элемент, который следует удалить из этого дека, если он присутствует - Возвращает:
-
true, если в результате вызова элемент был удален - Исключения:
-
ClassCastException— если класс указанного элемента несовместим с этим деком (необязательно) -
NullPointerException— если указанный элемент равен null (необязательно)
removeLastOccurrence
boolean removeLastOccurrence(Object o)
e, такой что o.equals(e) (если такой элемент существует). Возвращает true, если этот дек содержал указанный элемент (или, что эквивалентно, если в результате вызова дек изменился).- Определено в:
-
removeLastOccurrenceв интерфейсеDeque<E> - Параметры:
-
o— элемент, который следует удалить из этого дека, если он присутствует - Возвращает:
-
true, если в результате вызова элемент был удален - Исключения:
-
ClassCastException— если класс указанного элемента несовместим с этим деком (необязательно) -
NullPointerException— если указанный элемент равен null (необязательно)
add
boolean add(E e)
true, а если свободного места нет, выбрасывает IllegalStateException. При использовании дека с ограниченной вместимостью обычно предпочтительно использовать offer. Этот метод эквивалентен addLast.
- Определено в:
-
addв интерфейсеBlockingQueue<E> - Определено в:
-
addв интерфейсеCollection<E> - Определено в:
-
addв интерфейсеDeque<E> - Определено в:
-
addв интерфейсеQueue<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true(как указано вCollection.add(E)) - Исключения:
-
IllegalStateException— если элемент невозможно добавить в данный момент из-за ограничений вместимости -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
offer
boolean offer(E e)
true, а если свободного места нет — false. При использовании дека с ограниченной вместимостью обычно предпочтительнее этот метод, чем метод add(E), который может завершиться неудачей при вставке элемента только с выбрасыванием исключения. Этот метод эквивалентен offerLast.
- Определено в:
-
offerв интерфейсеBlockingQueue<E> - Определено в:
-
offerв интерфейсеDeque<E> - Определено в:
-
offerв интерфейсеQueue<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true, если элемент добавлен в эту очередь, иначеfalse - Исключения:
-
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
put
void put(E e) throws InterruptedException
Этот метод эквивалентен putLast.
- Определено в:
-
putв интерфейсеBlockingQueue<E> - Параметры:
-
e— добавляемый элемент - Исключения:
-
InterruptedException— если поток был прерван во время ожидания -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
offer
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
Этот метод эквивалентен offerLast.
- Определено в:
-
offerв интерфейсеBlockingQueue<E> - Параметры:
-
e— добавляемый элемент -
timeout— время ожидания до прекращения попыток, в единицахunit -
unit— объектTimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
-
true, если элемент добавлен в этот дек, иначеfalse - Исключения:
-
InterruptedException— если поток был прерван во время ожидания -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
remove
E remove()
poll() только тем, что выбрасывает исключение, если дек пуст. Этот метод эквивалентен removeFirst.
poll
E poll()
null, если дек пуст. Этот метод эквивалентен Deque.pollFirst().
take
E take() throws InterruptedException
Этот метод эквивалентен takeFirst.
- Определено в:
-
takeв интерфейсеBlockingQueue<E> - Возвращает:
- голову этого дека
- Исключения:
-
InterruptedException— если поток был прерван во время ожидания
poll
E poll(long timeout, TimeUnit unit) throws InterruptedException
Этот метод эквивалентен pollFirst.
- Определено в:
-
pollв интерфейсеBlockingQueue<E> - Параметры:
-
timeout— время ожидания до прекращения попыток, в единицахunit -
unit— объектTimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
- голову этого дека или
null, если указанное время ожидания истекло до появления элемента - Исключения:
-
InterruptedException— если поток был прерван во время ожидания
element
peek
E peek()
null, если дек пуст. Этот метод эквивалентен peekFirst.
remove
boolean remove(Object o)
e, такой что o.equals(e) (если такой элемент существует). Возвращает true, если этот дек содержал указанный элемент (или, что эквивалентно, если в результате вызова дек изменился). Этот метод эквивалентен removeFirstOccurrence.
- Определено в:
-
removeв интерфейсеBlockingQueue<E> - Определено в:
-
removeв интерфейсеCollection<E> - Определено в:
-
removeв интерфейсеDeque<E> - Параметры:
-
o— элемент, который следует удалить из этого дека, если он присутствует - Возвращает:
-
true, если в результате вызова этот дек изменился - Исключения:
-
ClassCastException— если класс указанного элемента несовместим с этим деком (необязательно) -
NullPointerException— если указанный элемент равен null (необязательно)
contains
boolean contains(Object o)
true, если этот дек содержит указанный элемент. Формально возвращает true тогда и только тогда, когда этот дек содержит хотя бы один элемент e, такой что o.equals(e).- Определено в:
-
containsв интерфейсеBlockingQueue<E> - Определено в:
-
containsв интерфейсеCollection<E> - Определено в:
-
containsв интерфейсеDeque<E> - Параметры:
-
o— объект, наличие которого в этом деке нужно проверить - Возвращает:
-
true, если этот дек содержит указанный элемент - Исключения:
-
ClassCastException— если класс указанного элемента несовместим с этим деком (необязательно) -
NullPointerException— если указанный элемент равен null (необязательно)
size
iterator
Iterator<E> iterator()
push
void push(E e)
IllegalStateException. Этот метод эквивалентен addFirst.
- Определено в:
-
pushв интерфейсеDeque<E> - Параметры:
-
e— помещаемый в стек элемент - Исключения:
-
IllegalStateException— если элемент невозможно добавить в данный момент из-за ограничений вместимости -
ClassCastException— если класс указанного элемента не позволяет добавить его в этот дек -
NullPointerException— если указанный элемент равен null -
IllegalArgumentException— если какое-либо свойство указанного элемента не позволяет добавить его в этот дек
© 1993, 2025, 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/25/docs/api/java.base/java/util/concurrent/BlockingDeque.html