Класс SynchronousQueue<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- java.util.concurrent.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(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) | Устанавливает нулевой элемент указанного массива в |
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 не возвращает элементы, пока не происходит активное ожидание.
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