Spec-Zone.ru › OpenJDK 17

Класс 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
Очередь с блокировкой блокирующего типа, в которой каждая операция вставки должна ожидать соответствующей операции удаления другим потоком, и наоборот. В синхронной очереди нет внутренней ёмкости, даже ёмкости в один элемент. Вы не можете peek в синхронную очередь, потому что элемент существует только когда вы пытаетесь его удалить; вы не можете вставить элемент (используя любой метод), если другой поток не пытается его удалить; вы не можете итерироваться, так как нет ничего, по чему можно итерироваться. Голова очереди — это элемент, который первый поток, ожидающий в очереди, пытается добавить в очередь; если такого потока нет, то элемент недоступен для удаления и poll() вернёт null. Для целей других Collection методов (например, contains), синхронная очередь выступает как пустой набор. Эта очередь не позволяет null элементов.

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

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

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

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

Since:
1.5
See Also:
  • Serialized Form

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

Конструктор Описание
SynchronousQueue()
Создаёт синхронную очередь с политикой доступа без гарантии очередности.
SynchronousQueue(boolean fair)
Создаёт синхронную очередь с указанной политикой честности.

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

Модификатор и тип Метод Описание
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()
Возвращает пустой итератор, в котором вызовы к 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 с политикой доступа nonfair.

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, 2021, 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/17/docs/api/java.base/java/util/concurrent/SynchronousQueue.html

Spec-Zone.ru

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