Класс LinkedTransferQueue<E>
- Параметры типа:
E— тип элементов, хранящихся в этой очереди
- Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, TransferQueue<E>, Queue<E>
public class LinkedTransferQueue<E> extends AbstractQueue<E> implements TransferQueue<E>, Serializable
TransferQueue, основанная на связанных узлах. Эта очередь упорядочивает элементы по принципу FIFO (первым пришёл — первым вышел) для каждого производителя. Голова очереди — это элемент, который дольше всего находится в очереди для некоторого производителя. Хвост очереди — это элемент, который меньше всего времени находится в очереди для некоторого производителя. Следует учитывать, что, в отличие от большинства коллекций, метод size НЕ является операцией с постоянным временем выполнения. Из-за асинхронной природы этих очередей для определения текущего количества элементов требуется обход элементов, поэтому результат может быть неточным, если коллекция изменяется во время обхода.
Групповые операции, добавляющие, удаляющие или проверяющие несколько элементов, такие как AbstractQueue.addAll(Collection), removeIf(Predicate) или forEach(Consumer), не гарантируется выполнять атомарно. Например, обход forEach, выполняемый одновременно с операцией
addAll, может увидеть лишь некоторые из добавленных элементов.
Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator.
Эффекты согласованности памяти: как и в случае с другими параллельными коллекциями, действия в потоке, предшествующие помещению объекта в LinkedTransferQueue, happen-before действий, следующих за доступом к этому элементу или его удалением из LinkedTransferQueue в другом потоке.
Этот класс входит в состав Java Collections Framework.
- Начиная с:
- 1.7
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
LinkedTransferQueue() |
Создаёт изначально пустую LinkedTransferQueue. |
LinkedTransferQueue |
Создаёт LinkedTransferQueue, изначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора этой коллекции. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Вставляет указанный элемент в конец этой очереди. |
boolean |
contains |
Возвращает true, если эта очередь содержит указанный элемент. |
int |
drainTo |
Удаляет из этой очереди все доступные элементы и добавляет их в заданную коллекцию. |
int |
drainTo |
Удаляет из этой очереди не более заданного количества доступных элементов и добавляет их в заданную коллекцию. |
void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не вызовет исключение. |
int |
getWaitingConsumerCount() |
Возвращает оценочное количество потребителей, ожидающих получения элементов посредством BlockingQueue.take() или ограниченного по времени вызова poll. |
boolean |
hasWaitingConsumer() |
Возвращает true, если хотя бы один потребитель ожидает получения элемента посредством BlockingQueue.take() или ограниченного по времени вызова poll. |
boolean |
isEmpty() |
Возвращает true, если эта очередь не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор элементов этой очереди в надлежащем порядке. |
boolean |
offer |
Вставляет указанный элемент в конец этой очереди. |
boolean |
offer |
Вставляет указанный элемент в конец этой очереди. |
E |
peek() |
Извлекает, но не удаляет элемент из начала этой очереди или возвращает null, если очередь пуста. |
E |
poll() |
Извлекает и удаляет элемент из начала этой очереди или возвращает null, если очередь пуста. |
E |
poll |
Извлекает и удаляет элемент из начала этой очереди, ожидая до указанного времени, если это необходимо, пока элемент не станет доступен. |
void |
put |
Вставляет указанный элемент в конец этой очереди. |
int |
remainingCapacity() |
Всегда возвращает Integer.MAX_VALUE, поскольку LinkedTransferQueue не ограничена по ёмкости. |
boolean |
remove |
Удаляет из этой очереди один экземпляр указанного элемента, если он присутствует. |
boolean |
removeAll |
Удаляет из этой коллекции все элементы, которые также содержатся в указанной коллекции (необязательная операция). |
boolean |
removeIf |
Удаляет из этой коллекции все элементы, удовлетворяющие заданному предикату (необязательная операция). |
boolean |
retainAll |
Оставляет в этой коллекции только элементы, содержащиеся в указанной коллекции (необязательная операция). |
int |
size() |
Возвращает количество элементов в этой очереди. |
Spliterator |
spliterator() |
Возвращает Spliterator для элементов этой очереди. |
E |
take() |
Извлекает и удаляет элемент из начала этой очереди, при необходимости ожидая, пока элемент не станет доступен. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой очереди в надлежащем порядке; тип возвращаемого массива во время выполнения совпадает с типом указанного массива. |
void |
transfer |
Передаёт элемент потребителю, при необходимости ожидая его получения. |
boolean |
tryTransfer |
По возможности немедленно передаёт элемент ожидающему потребителю. |
boolean |
tryTransfer |
Передаёт элемент потребителю, если это возможно сделать до истечения времени ожидания. |
Методы, объявленные в классе AbstractQueue
addAll, clear, element, remove | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addAll |
Добавляет в эту очередь все элементы указанной коллекции. |
void |
clear() |
Удаляет из этой очереди все элементы. |
E |
element() |
Извлекает, но не удаляет элемент из начала этой очереди. |
E |
remove() |
Извлекает и удаляет элемент из начала этой очереди. |
Методы, объявленные в классе AbstractCollection
containsAll, toString | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
containsAll |
Возвращает true, если эта коллекция содержит все элементы указанной коллекции. |
String |
toString() |
Возвращает строковое представление этой коллекции. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, «равен» ли этому объекту другой объект. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс этого Object во время выполнения. |
int |
hashCode() |
Возвращает значение хеш-кода этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Приостанавливает текущий поток до его пробуждения, обычно посредством вызова notify или interrupt. |
final void |
wait |
Приостанавливает текущий поток до его пробуждения, обычно посредством вызова notify или interrupt, либо до истечения заданного времени. |
final void |
wait |
Приостанавливает текущий поток до его пробуждения, обычно посредством вызова notify или interrupt, либо до истечения заданного времени. |
Методы, объявленные в интерфейсе Collection
equals, hashCode, parallelStream, stream, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает указанный объект с этой коллекцией на равенство. |
int |
hashCode() |
Возвращает значение хеш-кода этой коллекции. |
default Stream |
parallelStream() |
Возвращает, возможно, параллельный Stream с этой коллекцией в качестве источника. |
default Stream |
stream() |
Возвращает последовательный Stream с этой коллекцией в качестве источника. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется указанная функция generator. |
Подробное описание конструкторов
LinkedTransferQueue
public LinkedTransferQueue()
LinkedTransferQueue.LinkedTransferQueue
public LinkedTransferQueue(Collection<? extends E> c)
LinkedTransferQueue, изначально содержащую элементы указанной коллекции, добавленные в порядке обхода итератора коллекции.- Параметры:
-
c— коллекция элементов, которые следует изначально включить - Исключения:
-
NullPointerException— если указанная коллекция или любой из ее элементов равны null
Подробное описание методов
toArray
public Object[] toArray()
Возвращаемый массив будет «безопасным», поскольку эта очередь не хранит на него ссылок. (Иными словами, этот метод должен выделить новый массив.) Таким образом, вызывающий код может свободно изменять возвращаемый массив.
Этот метод служит связующим звеном между API на основе массивов и API на основе коллекций.
- Указано в:
-
toArrayв интерфейсеCollection<E> - Переопределено:
-
toArrayв классеAbstractCollection<E> - Возвращает:
- массив, содержащий все элементы этой очереди
toArray
public <T> T[] toArray(T[] a)
Если очередь помещается в указанный массив с запасом места (то есть массив содержит больше элементов, чем эта очередь), элемент массива, следующий непосредственно за концом очереди, устанавливается в null.
Как и метод toArray(), этот метод служит связующим звеном между API на основе массивов и API на основе коллекций. Кроме того, этот метод позволяет точно управлять типом выходного массива во время выполнения и при определенных обстоятельствах может использоваться для снижения затрат на выделение памяти.
Предположим, что x — очередь, которая, как известно, содержит только строки. Следующий код можно использовать для выгрузки очереди в новый массив, выделенный для String:
String[] y = x.toArray(new String[0]); Обратите внимание, что toArray(new Object[0]) функционально идентичен toArray().- Указано в:
-
toArrayв интерфейсеCollection<E> - Переопределено:
-
toArrayв классеAbstractCollection<E> - Параметры типа:
T— тип компонентов массива, предназначенного для хранения коллекции- Параметры:
-
a— массив, в котором должны храниться элементы очереди, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа во время выполнения - Возвращает:
- массив, содержащий все элементы этой очереди
- Исключения:
-
ArrayStoreException— если тип указанного массива во время выполнения не является надтипом типа во время выполнения каждого элемента этой очереди -
NullPointerException— если указанный массив равен null
spliterator
public Spliterator<E> spliterator()
Spliterator для элементов этой очереди. Возвращаемый сплитератор является слабо согласованным.
Spliterator сообщает о характеристиках Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.
- Указано в:
-
spliteratorв интерфейсеCollection<E> - Указано в:
-
spliteratorв интерфейсеIterable<E> - Примечание по реализации:
SpliteratorреализуетtrySplit, чтобы обеспечить ограниченный параллелизм.- Возвращает:
Spliteratorдля элементов этой очереди- Начиная с версии:
- 1.8
put
public void put(E e)
- Указано в:
-
putв интерфейсеBlockingQueue<E> - Параметры:
-
e— добавляемый элемент - Исключения:
-
NullPointerException— если указанный элемент равен null
offer
public boolean offer(E e, long timeout, TimeUnit unit)
false.- Указано в:
-
offerв интерфейсеBlockingQueue<E> - Параметры:
-
e— добавляемый элемент -
timeout— сколько ждать до прекращения ожидания, в единицахunit -
unit—TimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
-
true(как указано вBlockingQueue.offer) - Исключения:
-
NullPointerException— если указанный элемент равен null
offer
public boolean offer(E e)
false.- Указано в:
-
offerв интерфейсеBlockingQueue<E> - Указано в:
-
offerв интерфейсеQueue<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true(как указано вQueue.offer(E)) - Исключения:
-
NullPointerException— если указанный элемент равен null
add
public boolean add(E e)
IllegalStateException и не вернет false.- Указано в:
-
addв интерфейсеBlockingQueue<E> - Указано в:
-
addв интерфейсеCollection<E> - Указано в:
-
addв интерфейсеQueue<E> - Переопределено:
-
addв классеAbstractQueue<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true(как указано вCollection.add(E)) - Исключения:
-
NullPointerException— если указанный элемент равен null
tryTransfer
public boolean tryTransfer(E e)
Точнее, немедленно передает указанный элемент, если уже есть потребитель, ожидающий его получения (вызвавший take() или poll с тайм-аутом); в противном случае возвращает false, не помещая элемент в очередь.
- Указано в:
-
tryTransferв интерфейсеTransferQueue<E> - Параметры:
-
e— передаваемый элемент - Возвращает:
-
true, если элемент передан; в противном случае —false - Исключения:
-
NullPointerException— если указанный элемент равен null
transfer
public void transfer(E e) throws InterruptedException
Точнее, немедленно передает указанный элемент, если уже есть потребитель, ожидающий его получения (вызвавший take() или poll с тайм-аутом); в противном случае вставляет указанный элемент в конец этой очереди и ожидает, пока потребитель не получит элемент.
- Указано в:
-
transferв интерфейсеTransferQueue<E> - Параметры:
-
e— передаваемый элемент - Исключения:
-
NullPointerException— если указанный элемент равен null -
InterruptedException— если во время ожидания возникло прерывание; в этом случае элемент не остается в очереди
tryTransfer
public boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException
Точнее, немедленно передает указанный элемент, если уже есть потребитель, ожидающий его получения (вызвавший take() или poll с тайм-аутом); в противном случае вставляет указанный элемент в конец этой очереди и ожидает, пока потребитель не получит элемент. Если указанное время ожидания истечет до передачи элемента, возвращает false.
- Указано в:
-
tryTransferв интерфейсеTransferQueue<E> - Параметры:
-
e— передаваемый элемент -
timeout— сколько ждать до прекращения ожидания, в единицахunit -
unit—TimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
-
trueв случае успеха илиfalse, если указанное время ожидания истекает до завершения операции; в этом случае элемент не остается в очереди - Исключения:
-
NullPointerException— если указанный элемент равен null -
InterruptedException— если во время ожидания возникло прерывание; в этом случае элемент не остается в очереди
take
public E take() throws InterruptedException
BlockingQueue- Указано в:
-
takeв интерфейсеBlockingQueue<E> - Возвращает:
- элемент из начала этой очереди
- Исключения:
-
InterruptedException— если во время ожидания возникло прерывание
poll
public E poll(long timeout, TimeUnit unit) throws InterruptedException
BlockingQueue- Указано в:
-
pollв интерфейсеBlockingQueue<E> - Параметры:
-
timeout— сколько ждать до прекращения ожидания, в единицахunit -
unit—TimeUnit, определяющий интерпретацию параметраtimeout - Возвращает:
- элемент из начала этой очереди или
null, если указанное время ожидания истекло до появления элемента - Исключения:
-
InterruptedException— если во время ожидания возникло прерывание
poll
drainTo
public int drainTo(Collection<? super E> c)
BlockingQueuec может привести к тому, что после возникновения соответствующего исключения элементы будут находиться ни в одной из коллекций, в одной из них или в обеих. Попытка перенести элементы очереди в нее же приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.- Указано в:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c— коллекция, в которую следует перенести элементы - Возвращает:
- количество перенесенных элементов
- Исключения:
-
NullPointerException— если указанная коллекция равна null -
IllegalArgumentException— если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди препятствует его добавлению в указанную коллекцию
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueuec может привести к тому, что после возникновения соответствующего исключения элементы будут находиться ни в одной из коллекций, в одной из них или в обеих. Попытка перенести элементы очереди в нее же приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.- Указано в:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c— коллекция, в которую следует перенести элементы -
maxElements— максимальное количество элементов для переноса - Возвращает:
- количество перенесенных элементов
- Исключения:
-
NullPointerException— если указанная коллекция равна null -
IllegalArgumentException— если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди препятствует его добавлению в указанную коллекцию
iterator
public Iterator<E> iterator()
Возвращаемый итератор является слабо согласованным.
- Указано в:
-
iteratorв интерфейсеCollection<E> - Указано в:
-
iteratorв интерфейсеIterable<E> - Указано в:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам этой очереди в надлежащем порядке
peek
isEmpty
public boolean isEmpty()
true, если эта очередь не содержит элементов.- Указано в:
-
isEmptyв интерфейсеCollection<E> - Переопределено:
-
isEmptyв классеAbstractCollection<E> - Возвращает:
-
true, если эта очередь не содержит элементов
hasWaitingConsumer
public boolean hasWaitingConsumer()
TransferQueuetrue, если хотя бы один потребитель ожидает получения элемента с помощью BlockingQueue.take() или poll с тайм-аутом. Возвращаемое значение отражает состояние на конкретный момент времени.- Указано в:
-
hasWaitingConsumerв интерфейсеTransferQueue<E> - Возвращает:
-
true, если хотя бы один потребитель ожидает получения элемента
size
public int size()
Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE. Обратите внимание: в отличие от большинства коллекций, этот метод НЕ выполняется за постоянное время. Из-за асинхронной природы этих очередей для определения текущего количества элементов требуется обход O(n).
- Указано в:
-
sizeв интерфейсеCollection<E> - Возвращает:
- количество элементов в этой очереди
getWaitingConsumerCount
public int getWaitingConsumerCount()
TransferQueueBlockingQueue.take() или poll с тайм-аутом. Возвращаемое значение является приблизительной оценкой состояния на конкретный момент времени и может быть неточным, если потребители завершили ожидание или отказались от него. Это значение может быть полезно для мониторинга и эвристических алгоритмов, но не для управления синхронизацией. Реализации этого метода, вероятно, будут заметно медленнее, чем реализации метода TransferQueue.hasWaitingConsumer().- Указано в:
-
getWaitingConsumerCountв интерфейсеTransferQueue<E> - Возвращает:
- количество потребителей, ожидающих получения элементов
remove
public boolean remove(Object o)
e такой, что o.equals(e), если очередь содержит один или несколько таких элементов. Возвращает true, если очередь содержала указанный элемент (или, что эквивалентно, если вызов изменил очередь).- Указано в:
-
removeв интерфейсеBlockingQueue<E> - Указано в:
-
removeв интерфейсеCollection<E> - Переопределено:
-
removeв классеAbstractCollection<E> - Параметры:
-
o— элемент, который следует удалить из этой очереди, если он присутствует - Возвращает:
-
true, если вызов изменил эту очередь
contains
public boolean contains(Object o)
true, если эта очередь содержит указанный элемент. Точнее, возвращает true тогда и только тогда, когда эта очередь содержит хотя бы один элемент e такой, что o.equals(e).- Указано в:
-
containsв интерфейсеBlockingQueue<E> - Указано в:
-
containsв интерфейсеCollection<E> - Переопределено:
-
containsв классеAbstractCollection<E> - Параметры:
-
o— объект, наличие которого в этой очереди требуется проверить - Возвращает:
-
true, если эта очередь содержит указанный элемент
remainingCapacity
public int remainingCapacity()
Integer.MAX_VALUE, поскольку LinkedTransferQueue не имеет ограничений по емкости.- Указано в:
-
remainingCapacityв интерфейсеBlockingQueue<E> - Возвращает:
-
Integer.MAX_VALUE(как указано вBlockingQueue.remainingCapacity())
removeIf
public boolean removeIf(Predicate<? super E> filter)
Collection- Указано в:
-
removeIfв интерфейсеCollection<E> - Параметры:
-
filter— предикат, возвращающийtrueдля элементов, которые требуется удалить - Возвращает:
-
true, если были удалены какие-либо элементы - Исключения:
-
NullPointerException— если указанный фильтр равен null
removeAll
public boolean removeAll(Collection<?> c)
AbstractCollection- Указано в:
-
removeAllв интерфейсеCollection<E> - Переопределено:
-
removeAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция, содержащая элементы, которые следует удалить из этой коллекции - Возвращает:
-
true, если вызов изменил эту коллекцию - Исключения:
-
NullPointerException— если эта коллекция содержит один или несколько элементов null, а указанная коллекция не поддерживает элементы null (необязательно), либо если указанная коллекция равна null - См. также:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Указано в:
-
retainAllв интерфейсеCollection<E> - Переопределено:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция, содержащая элементы, которые следует оставить в этой коллекции - Возвращает:
-
true, если вызов изменил эту коллекцию - Исключения:
-
NullPointerException— если эта коллекция содержит один или несколько элементов null, а указанная коллекция не допускает элементы null (необязательно), либо если указанная коллекция равна null - См. также:
forEach
public void forEach(Consumer<? super E> action)
IterableIterable, пока не будут обработаны все элементы или пока действие не вызовет исключение. Если порядок итерации определен, действия выполняются в этом порядке. Исключения, вызванные действием, передаются вызывающему коду. Поведение этого метода не определено, если действие производит побочные эффекты, изменяющие исходный набор элементов, за исключением случаев, когда переопределяющий класс определил политику параллельного изменения.
- Указано в:
-
forEachв интерфейсеIterable<E> - Параметры:
-
action— действие, выполняемое для каждого элемента - Исключения:
-
NullPointerException— если указанное действие равно null
© 1993, 2025, 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.