Класс SynchronousQueue<E>
- Параметры типа:
E— тип элементов, хранящихся в этой очереди
- Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
public class SynchronousQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
peek в синхронной очереди, поскольку элемент присутствует в ней, только когда вы пытаетесь его извлечь; нельзя вставить элемент (с помощью любого метода), если другой поток не пытается его извлечь; нельзя выполнять итерацию, поскольку перебирать нечего. Голова очереди — это элемент, который первый ожидающий поток-вставитель пытается добавить в очередь; если такого ожидающего потока нет, то элементы недоступны для извлечения, и poll() вернёт null. Для целей других методов Collection (например, contains) SynchronousQueue ведёт себя как пустая коллекция. Эта очередь не допускает элементы null. Синхронные очереди похожи на каналы rendezvous, используемые в CSP и Ada. Они хорошо подходят для схем передачи управления, в которых объект, работающий в одном потоке, должен синхронизироваться с объектом, работающим в другом потоке, чтобы передать ему некоторую информацию, событие или задачу.
Этот класс поддерживает необязательную политику справедливости при упорядочивании ожидающих потоков-производителей и потоков-потребителей. По умолчанию этот порядок не гарантируется. Однако очередь, созданная с включённой справедливостью true, предоставляет потокам доступ в порядке FIFO.
Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.
Этот класс является частью Java Collections Framework.
- Начиная с версии:
- 1.5
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
SynchronousQueue() |
Создаёт SynchronousQueue с политикой доступа без обеспечения справедливости. |
SynchronousQueue |
Создаёт SynchronousQueue с указанной политикой справедливости. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
clear() |
Ничего не делает. |
boolean |
contains |
Всегда возвращает false. |
boolean |
containsAll |
Возвращает false, если только указанная коллекция не пуста. |
int |
drainTo |
Удаляет из этой очереди все доступные элементы и добавляет их в указанную коллекцию. |
int |
drainTo |
Удаляет из этой очереди не более указанного количества доступных элементов и добавляет их в указанную коллекцию. |
boolean |
isEmpty() |
Всегда возвращает true. |
Iterator |
iterator() |
Возвращает пустой итератор, у которого hasNext всегда возвращает false. |
boolean |
offer |
Вставляет указанный элемент в эту очередь, если другой поток ожидает его получения. |
boolean |
offer |
Вставляет указанный элемент в эту очередь, при необходимости ожидая в течение указанного времени, пока другой поток его получит. |
E |
peek() |
Всегда возвращает null. |
E |
poll() |
Извлекает и удаляет голову этой очереди, если другой поток в данный момент делает элемент доступным. |
E |
poll |
Извлекает и удаляет голову этой очереди, при необходимости ожидая в течение указанного времени, пока другой поток вставит элемент. |
void |
put |
Добавляет указанный элемент в эту очередь, при необходимости ожидая, пока другой поток его получит. |
int |
remainingCapacity() |
Всегда возвращает ноль. |
boolean |
remove |
Всегда возвращает false. |
boolean |
removeAll |
Всегда возвращает false. |
boolean |
retainAll |
Всегда возвращает false. |
int |
size() |
Всегда возвращает ноль. |
Spliterator |
spliterator() |
Возвращает пустой сплитератор, в котором вызовы trySplit всегда возвращают null. |
E |
take() |
Извлекает и удаляет голову этой очереди, при необходимости ожидая, пока другой поток вставит элемент. |
Object[] |
toArray() |
Возвращает массив нулевой длины. |
<T> T[] |
toArray |
Устанавливает нулевой элемент указанного массива в null (если длина массива не равна нулю) и возвращает этот массив. |
String |
toString() |
Всегда возвращает "[]". |
Методы, объявленные в классе AbstractQueue
add, addAll, element, remove
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе BlockingQueue
add
Методы, объявленные в интерфейсе Collection
addAll, equals, hashCode, parallelStream, removeIf, stream, toArray
Подробное описание конструкторов
SynchronousQueue
public SynchronousQueue()
SynchronousQueue с политикой доступа без обеспечения справедливости.SynchronousQueue
public SynchronousQueue(boolean fair)
SynchronousQueue с указанной политикой справедливости.- Параметры:
-
fair— если значение true, ожидающие потоки конкурируют за доступ в порядке FIFO; в противном случае порядок не определён.
Подробное описание методов
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)
- Переопределяет:
-
offerв интерфейсеBlockingQueue<E> - Переопределяет:
-
offerв интерфейсеQueue<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true, если элемент был добавлен в эту очередь, иначеfalse - Исключения:
-
NullPointerException— если указанный элемент равен null
take
public E take() throws InterruptedException
- Переопределяет:
-
takeв интерфейсеBlockingQueue<E> - Возвращает:
- голову этой очереди
- Исключения:
-
InterruptedException— если ожидание было прервано
poll
public E poll(long timeout, TimeUnit unit) throws InterruptedException
- Переопределяет:
-
pollв интерфейсеBlockingQueue<E> - Параметры:
-
timeout— время ожидания до прекращения попыток, в единицахunit -
unit—TimeUnit, определяющий способ интерпретации параметраtimeout - Возвращает:
- голову этой очереди или
null, если указанное время ожидания истекло до появления элемента - Исключения:
-
InterruptedException— если ожидание было прервано
poll
isEmpty
public boolean isEmpty()
true. SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
isEmptyв интерфейсеCollection<E> - Переопределяет:
-
isEmptyв классеAbstractCollection<E> - Возвращает:
true
size
public int size()
SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
sizeв интерфейсеCollection<E> - Возвращает:
- ноль
remainingCapacity
public int remainingCapacity()
SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
remainingCapacityв интерфейсеBlockingQueue<E> - Возвращает:
- ноль
clear
public void clear()
SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
clearв интерфейсеCollection<E> - Переопределяет:
-
clearв классеAbstractQueue<E>
contains
public boolean contains(Object o)
false. SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
containsв интерфейсеBlockingQueue<E> - Переопределяет:
-
containsв интерфейсеCollection<E> - Переопределяет:
-
containsв классеAbstractCollection<E> - Параметры:
-
o— элемент - Возвращает:
false
remove
public boolean remove(Object o)
false. SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
removeв интерфейсеBlockingQueue<E> - Переопределяет:
-
removeв интерфейсеCollection<E> - Переопределяет:
-
removeв классеAbstractCollection<E> - Параметры:
-
o— удаляемый элемент - Возвращает:
false
containsAll
public boolean containsAll(Collection<?> c)
false, если только указанная коллекция не пуста. SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
containsAllв интерфейсеCollection<E> - Переопределяет:
-
containsAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция - Возвращает:
-
false, если указанная коллекция не пуста - См. также:
removeAll
public boolean removeAll(Collection<?> c)
false. SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
removeAllв интерфейсеCollection<E> - Переопределяет:
-
removeAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция - Возвращает:
false- См. также:
retainAll
public boolean retainAll(Collection<?> c)
false. SynchronousQueue не имеет внутренней ёмкости.- Переопределяет:
-
retainAllв интерфейсеCollection<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция - Возвращает:
false- См. также:
peek
iterator
public Iterator<E> iterator()
hasNext всегда возвращает false.- Переопределяет:
-
iteratorв интерфейсеCollection<E> - Переопределяет:
-
iteratorв интерфейсеIterable<E> - Переопределяет:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- пустой итератор
spliterator
public Spliterator<E> spliterator()
trySplit всегда возвращают null.- Переопределяет:
-
spliteratorв интерфейсеCollection<E> - Переопределяет:
-
spliteratorв интерфейсеIterable<E> - Возвращает:
- пустой сплитератор
- Начиная с версии:
- 1.8
toArray
public Object[] toArray()
- Переопределяет:
-
toArrayв интерфейсеCollection<E> - Переопределяет:
-
toArrayв классеAbstractCollection<E> - Возвращает:
- массив нулевой длины
toArray
public <T> T[] toArray(T[] a)
null (если длина массива не равна нулю) и возвращает этот массив.- Переопределяет:
-
toArrayв интерфейсеCollection<E> - Переопределяет:
-
toArrayв классеAbstractCollection<E> - Параметры типа:
T— тип компонентов массива, предназначенного для хранения коллекции- Параметры:
-
a— массив - Возвращает:
- указанный массив
- Исключения:
-
NullPointerException— если указанный массив равен null
toString
public String toString()
"[]".- Переопределяет:
-
toStringв классеAbstractCollection<E> - Возвращает:
"[]"
drainTo
public int drainTo(Collection<? super E> c)
BlockingQueuec возникает ошибка, то при выбросе соответствующего исключения элементы могут оказаться ни в одной из коллекций, в одной из них или в обеих. Попытка перенести элементы очереди в неё саму приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время её выполнения.- Переопределяет:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c— коллекция, в которую нужно перенести элементы - Возвращает:
- количество перенесённых элементов
- Исключения:
-
UnsupportedOperationException— если указанная коллекция не поддерживает добавление элементов -
ClassCastException— если класс элемента этой очереди не позволяет добавить его в указанную коллекцию -
NullPointerException— если указанная коллекция равна null -
IllegalArgumentException— если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди не позволяет добавить его в указанную коллекцию
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueuec возникает ошибка, то при выбросе соответствующего исключения элементы могут оказаться ни в одной из коллекций, в одной из них или в обеих. Попытка перенести элементы очереди в неё саму приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время её выполнения.- Переопределяет:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c— коллекция, в которую нужно перенести элементы -
maxElements— максимальное количество элементов для переноса - Возвращает:
- количество перенесённых элементов
- Исключения:
-
UnsupportedOperationException— если указанная коллекция не поддерживает добавление элементов -
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/SynchronousQueue.html