Spec-Zone.ru › OpenJDK 24

Класс SynchronousQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.SynchronousQueue<E>
Type Parameters:
E - тип элементов, хранящихся в этой очереди
Все реализованные интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
public class SynchronousQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
Очередь с блокировкой blocking queue, в которой каждая операция вставки должна ожидать соответствующей операции удаления другим потоком, и наоборот. В синхронной очереди нет внутренней ёмкости, даже ёмкости в один элемент. Вы не можете peek в синхронной очереди, потому что элемент присутствует только при попытке его удаления; вы не можете вставить элемент (используя любой метод), если другой поток не пытается его удалить; вы не можете итерировать, так как нет ничего для итерации. Голова очереди — это элемент, который первый поток, вставленный в очередь, пытается добавить в очередь; если такого потока нет, то ни один элемент не доступен для удаления, и poll() вернёт null. Для целей других Collection методов (например, contains), синхронная очередь ведет себя как пустое множество. Эта очередь не допускает null элементов.

Синхронные очереди похожи на каналы ожидания (rendezvous channels), используемые в CSP и Ada. Они хорошо подходят для задач передачи данных, в которых объект, работающий в одном потоке, должен синхронизироваться с объектом, работающим в другом потоке, чтобы передать ему некоторую информацию, событие или задачу.

Этот класс поддерживает необязательную политику справедливости для упорядочения ожидающих потоков-производителей и потоков-потребителей. По умолчанию это упорядочение не гарантируется. Однако очередь, созданная со справедливостью, установленной на true, предоставляет потокам доступ в порядке FIFO.

Этот класс и его итератор реализуют все _необязательные_ методы интерфейсов Collection и Iterator.

Этот класс является частью Java Collections Framework.

Since:
1.5
See Also:
  • Serialized Form

Краткое описание конструкторов

Конструктор Описание
SynchronousQueue()
Создает SynchronousQueue с политикой доступа nonfair.
SynchronousQueue(boolean fair)
Создает SynchronousQueue с указанной политикой справедливости.

Краткое описание методов

Модификатор и тип Метод Описание
void clear()
Ничего не делает.
boolean contains(Object o)
Всегда возвращает false.
boolean containsAll(Collection<?> c)
Возвращает false, если заданная коллекция не пуста.
int drainTo(Collection<? super E> c)
Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию.
int drainTo(Collection<? super E> c, int maxElements)
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию.
boolean isEmpty()
Всегда возвращает true.
Iterator<E> iterator()
Возвращает пустой итератор, в котором hasNext всегда возвращает false.
boolean offer(E e)
Вставляет указанный элемент в эту очередь, если другой поток ожидает его получения.
boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в эту очередь, ожидая, если необходимо, до указанного времени ожидания, пока другой поток не получит его.
E peek()
Всегда возвращает null.
E poll()
Получает и удаляет голову этой очереди, если другой поток в данный момент делает элемент доступным.
E poll(long timeout, TimeUnit unit)
Получает и удаляет голову этой очереди, ожидая, если необходимо, до указанного времени ожидания, пока другой поток не вставит её.
void put(E e)
Добавляет указанный элемент в эту очередь, ожидая, если необходимо, пока другой поток не получит его.
int remainingCapacity()
Всегда возвращает ноль.
boolean remove(Object o)
Всегда возвращает false.
boolean removeAll(Collection<?> c)
Всегда возвращает false.
boolean retainAll(Collection<?> c)
Всегда возвращает false.
int size()
Всегда возвращает ноль.
Spliterator<E> spliterator()
Возвращает пустой spliterator, в котором вызовы trySplit всегда возвращают null.
E take()
Получает и удаляет голову этой очереди, ожидая, если необходимо, пока другой поток её вставит.
Object[] toArray()
Возвращает массив нулевой длины.
<T> T[] toArray(T[] a)
Устанавливает нулевой элемент указанного массива в null (если массив имеет ненулевую длину) и возвращает его.
String toString()
Всегда возвращает "[]".

Методы, объявленные в классе java.util.AbstractQueue

add, addAll, element, remove

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе java.util.concurrent.BlockingQueue

add

Методы, объявленные в интерфейсе java.util.Collection

addAll, equals, hashCode, parallelStream, removeIf, stream, toArray

Методы, объявленные в интерфейсе java.lang.Iterable

forEach

Методы, объявленные в интерфейсе java.util.Queue

element, remove

Подробное описание конструкторов

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

public E poll()
Извлекает и удаляет голову этой очереди, если другой поток в данный момент делает элемент доступным.
Определено в:
poll в интерфейсе Queue<E>
Возвращает:
голова этой очереди, или null, если элемент недоступен

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, если заданная коллекция не пустая
См. также:
  • AbstractCollection.contains(Object)

removeAll

public boolean removeAll(Collection<?> c)
Всегда возвращает false. В SynchronousQueue нет внутренней ёмкости.
Определено в:
removeAll в интерфейсе Collection<E>
Переопределяет:
removeAll в классе AbstractCollection<E>
Параметры:
c - коллекция
Возвращает:
false
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

retainAll

public boolean retainAll(Collection<?> c)
Всегда возвращает false. В SynchronousQueue нет внутренней ёмкости.
Определено в:
retainAll в интерфейсе Collection<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c - коллекция
Возвращает:
false
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

peek

public E peek()
Всегда возвращает null. В SynchronousQueue элементы не возвращаются, если на них не явно не ждут.
Определено в:
peek в интерфейсе Queue<E>
Возвращает:
null

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)
Описание скопировано из интерфейса: 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 - если указанная коллекция — это эта очередь, или какая-то характеристика элемента этой очереди препятствует его добавлению в указанную коллекцию

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/SynchronousQueue.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API