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