Класс 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), очередь с синхронизацией действует как пустое множество. Эта очередь не допускает null элементов. Очереди с синхронизацией похожи на каналы ожидания, используемые в CSP и Ada. Они хорошо подходят для задач передачи данных, в которых объект, работающий в одном потоке, должен синхронизироваться с объектом, работающим в другом потоке, чтобы передать ему информацию, событие или задачу.
Этот класс поддерживает необязательную политику честности для упорядочивания ожидающих потоков-производителей и потоков-потребителей. По умолчанию это упорядочивание не гарантируется. Однако очередь, созданная с честностью, установленной в true , предоставляет потокам доступ в порядке очереди FIFO.
Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.
Этот класс является членом Java Collections Framework.
- Since:
- 1.5
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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() |
Всегда возвращает "[]". |
Методы, объявленные в классе 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
Подробное описание конструкторов
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за исключением случая, когда заданный набор пуст - См. также:
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
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)
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, 2023, 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/21/docs/api/java.base/java/util/concurrent/SynchronousQueue.html