Класс SynchronousQueue<E>

Type Parameters:
E - тип элементов, хранящихся в этой очереди
All Implemented Interfaces:
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 элементов.

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

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

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

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

Since:
1.5
See Also:
Serialized Form

Конструкторы

Конструктор Описание
SynchronousQueue()

Создаёт SynchronousQueue с политикой доступа без честности.

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 с указанной политикой честности.

Parameters:
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()

Возвращает пустой spliterator, в котором вызовы trySplit всегда возвращают null.

Указано в:
spliterator в интерфейсе Collection<E>
Указано в:
spliterator в интерфейсе Iterable<E>
Возвращает:
пустой spliterator
С тех пор:
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, 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/SynchronousQueue.html

Spec-Zone .ru
спецификации, руководства, описания, API