Spec-Zone.ru › OpenJDK 25

Класс PriorityBlockingQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.PriorityBlockingQueue<E>
Параметры типа:
E — тип элементов, хранящихся в этой очереди
Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
public class PriorityBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
Неограниченная блокирующая очередь, использующая те же правила упорядочивания, что и класс PriorityQueue, и предоставляющая блокирующие операции извлечения. Хотя эта очередь логически не ограничена, попытки добавления элементов могут завершиться неудачей из-за нехватки ресурсов (что приводит к OutOfMemoryError). Этот класс не допускает элементы null. Очередь с приоритетом, использующая естественный порядок, также не допускает добавления объектов, не реализующих сравнение (это приводит к ClassCastException).

Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator. Не гарантируется, что итератор, предоставляемый методом iterator(), и сплитератор, предоставляемый методом spliterator(), будут обходить элементы PriorityBlockingQueue в каком-либо определённом порядке. Если вам нужен упорядоченный обход, рассмотрите возможность использования Arrays.sort(pq.toArray()). Кроме того, метод drainTo можно использовать, чтобы удалить некоторые или все элементы в порядке приоритета и поместить их в другую коллекцию.

Операции этого класса не гарантируют порядок элементов с одинаковым приоритетом. Если необходимо обеспечить упорядочивание, можно определить пользовательские классы или компараторы, использующие вторичный ключ для разрешения совпадений значений основного приоритета. Например, ниже приведён класс, который применяет правило FIFO для разрешения совпадений у сравниваемых элементов. Чтобы использовать его, следует добавлять new FIFOEntry(anEntry) вместо обычного объекта-записи.

class FIFOEntry<E extends Comparable<? super E>>
    implements Comparable<FIFOEntry<E>> {
  static final AtomicLong seq = new AtomicLong();
  final long seqNum;
  final E entry;
  public FIFOEntry(E entry) {
    seqNum = seq.getAndIncrement();
    this.entry = entry;
  }
  public E getEntry() { return entry; }
  public int compareTo(FIFOEntry<E> other) {
    int res = entry.compareTo(other.entry);
    if (res == 0 && other.entry != this.entry)
      res = (seqNum < other.seqNum ? -1 : 1);
    return res;
  }
}

Этот класс входит в состав Java Collections Framework.

Начиная с версии:
1.5
См. также:
  • Сериализованная форма

Краткое описание конструкторов

Конструктор Описание
PriorityBlockingQueue()
Создаёт PriorityBlockingQueue с начальной ёмкостью по умолчанию (11), упорядочивающий элементы в соответствии с их естественным порядком.
PriorityBlockingQueue(int initialCapacity)
Создаёт PriorityBlockingQueue с указанной начальной ёмкостью, упорядочивающий элементы в соответствии с их естественным порядком.
PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
Создаёт PriorityBlockingQueue с указанной начальной ёмкостью, упорядочивающий элементы в соответствии с указанным компаратором.
PriorityBlockingQueue(Collection<? extends E> c)
Создаёт PriorityBlockingQueue, содержащую элементы указанной коллекции.

Краткое описание методов

Модификатор и тип Метод Описание
boolean add(E e)
Вставляет указанный элемент в эту очередь с приоритетом.
void clear()
Атомарно удаляет все элементы из этой очереди.
Comparator<? super E> comparator()
Возвращает компаратор, используемый для упорядочивания элементов в этой очереди, или null, если очередь использует естественный порядок своих элементов.
boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент.
int drainTo(Collection<? super E> c)
Удаляет все доступные элементы из этой очереди и добавляет их в указанную коллекцию.
int drainTo(Collection<? super E> c, int maxElements)
Удаляет из этой очереди не более указанного числа доступных элементов и добавляет их в указанную коллекцию.
void forEach(Consumer<? super E> action)
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не вызовет исключение.
Iterator<E> iterator()
Возвращает итератор по элементам этой очереди.
boolean offer(E e)
Вставляет указанный элемент в эту очередь с приоритетом.
boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в эту очередь с приоритетом.
E peek()
Возвращает, не удаляя, голову этой очереди или null, если очередь пуста.
E poll()
Извлекает и удаляет голову этой очереди или возвращает null, если очередь пуста.
E poll(long timeout, TimeUnit unit)
Извлекает и удаляет голову этой очереди, при необходимости ожидая появления элемента в течение указанного времени ожидания.
void put(E e)
Вставляет указанный элемент в эту очередь с приоритетом.
int remainingCapacity()
Всегда возвращает Integer.MAX_VALUE, поскольку PriorityBlockingQueue не ограничена по ёмкости.
boolean remove(Object o)
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует.
boolean removeAll(Collection<?> c)
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция).
boolean removeIf(Predicate<? super E> filter)
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату (необязательная операция).
boolean retainAll(Collection<?> c)
Оставляет только те элементы этой коллекции, которые содержатся в указанной коллекции (необязательная операция).
int size()
Возвращает количество элементов в этой коллекции.
Spliterator<E> spliterator()
Возвращает Spliterator для обхода элементов этой очереди.
E take()
Извлекает и удаляет голову этой очереди, при необходимости ожидая появления элемента.
Object[] toArray()
Возвращает массив, содержащий все элементы этой очереди.
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы этой очереди; тип возвращаемого массива во время выполнения соответствует типу указанного массива.

Методы, объявленные в классе AbstractQueue

addAll, element, remove

Методы, объявленные в классе AbstractCollection

containsAll, isEmpty, toString

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе Collection

addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray

Методы, объявленные в интерфейсе Queue

element, remove

Подробное описание конструкторов

PriorityBlockingQueue

public PriorityBlockingQueue()
Создает PriorityBlockingQueue с начальной емкостью по умолчанию (11), упорядочивающую элементы согласно их естественному порядку.

PriorityBlockingQueue

public PriorityBlockingQueue(int initialCapacity)
Создает PriorityBlockingQueue с указанной начальной емкостью, упорядочивающую элементы согласно их естественному порядку.
Параметры:
initialCapacity — начальная емкость этой очереди с приоритетами
Исключения:
IllegalArgumentException — если initialCapacity меньше 1

PriorityBlockingQueue

public PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
Создает PriorityBlockingQueue с указанной начальной емкостью, упорядочивающую элементы согласно указанному компаратору.
Параметры:
initialCapacity — начальная емкость этой очереди с приоритетами
comparator — компаратор, который будет использоваться для упорядочивания этой очереди с приоритетами. Если null, будет использоваться естественный порядок элементов.
Исключения:
IllegalArgumentException — если initialCapacity меньше 1

PriorityBlockingQueue

public PriorityBlockingQueue(Collection<? extends E> c)
Создает PriorityBlockingQueue, содержащую элементы указанной коллекции. Если указанная коллекция является SortedSet или PriorityBlockingQueue, эта очередь с приоритетами будет упорядочена так же. В противном случае эта очередь с приоритетами будет упорядочена согласно естественному порядку ее элементов.
Параметры:
c — коллекция, элементы которой необходимо поместить в эту очередь с приоритетами
Исключения:
ClassCastException — если элементы указанной коллекции нельзя сравнить друг с другом в соответствии с порядком очереди с приоритетами
NullPointerException — если указанная коллекция или любой из ее элементов равен null

Подробное описание методов

add

public boolean add(E e)
Вставляет указанный элемент в эту очередь с приоритетами.
Определено в:
add в интерфейсе BlockingQueue<E>
Определено в:
add в интерфейсе Collection<E>
Определено в:
add в интерфейсе Queue<E>
Переопределяет:
add в классе AbstractQueue<E>
Параметры:
e — добавляемый элемент
Возвращает:
true (как указано в Collection.add(E))
Исключения:
ClassCastException — если указанный элемент нельзя сравнить с элементами, уже находящимися в очереди с приоритетами, в соответствии с порядком этой очереди
NullPointerException — если указанный элемент равен null

offer

public boolean offer(E e)
Вставляет указанный элемент в эту очередь с приоритетами. Поскольку емкость очереди не ограничена, этот метод никогда не вернет false.
Определено в:
offer в интерфейсе BlockingQueue<E>
Определено в:
offer в интерфейсе Queue<E>
Параметры:
e — добавляемый элемент
Возвращает:
true (как указано в Queue.offer(E))
Исключения:
ClassCastException — если указанный элемент нельзя сравнить с элементами, уже находящимися в очереди с приоритетами, в соответствии с порядком этой очереди
NullPointerException — если указанный элемент равен null

put

public void put(E e)
Вставляет указанный элемент в эту очередь с приоритетами. Поскольку емкость очереди не ограничена, этот метод никогда не блокируется.
Определено в:
put в интерфейсе BlockingQueue<E>
Параметры:
e — добавляемый элемент
Исключения:
ClassCastException — если указанный элемент нельзя сравнить с элементами, уже находящимися в очереди с приоритетами, в соответствии с порядком этой очереди
NullPointerException — если указанный элемент равен null

offer

public boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в эту очередь с приоритетами. Поскольку емкость очереди не ограничена, этот метод никогда не блокируется и не возвращает false.
Определено в:
offer в интерфейсе BlockingQueue<E>
Параметры:
e — добавляемый элемент
timeout — этот параметр игнорируется, поскольку метод никогда не блокируется
unit — этот параметр игнорируется, поскольку метод никогда не блокируется
Возвращает:
true (как указано в BlockingQueue.offer)
Исключения:
ClassCastException — если указанный элемент нельзя сравнить с элементами, уже находящимися в очереди с приоритетами, в соответствии с порядком этой очереди
NullPointerException — если указанный элемент равен null

poll

public E poll()
Описание скопировано из интерфейса: Queue
Извлекает и удаляет начало этой очереди или возвращает null, если очередь пуста.
Определено в:
poll в интерфейсе Queue<E>
Возвращает:
начало этой очереди или null, если очередь пуста

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 — если ожидание было прервано

peek

public E peek()
Описание скопировано из интерфейса: Queue
Извлекает, но не удаляет начало этой очереди или возвращает null, если очередь пуста.
Определено в:
peek в интерфейсе Queue<E>
Возвращает:
начало этой очереди или null, если очередь пуста

comparator

public Comparator<? super E> comparator()
Возвращает компаратор, используемый для упорядочивания элементов этой очереди, или null, если очередь использует естественный порядок своих элементов.
Возвращает:
компаратор, используемый для упорядочивания элементов этой очереди, или null, если очередь использует естественный порядок своих элементов

size

public int size()
Описание скопировано из интерфейса: Collection
Возвращает количество элементов в этой коллекции. Если коллекция содержит более Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.
Определено в:
size в интерфейсе Collection<E>
Возвращает:
количество элементов в этой коллекции

remainingCapacity

public int remainingCapacity()
Всегда возвращает Integer.MAX_VALUE, поскольку емкость PriorityBlockingQueue не ограничена.
Определено в:
remainingCapacity в интерфейсе BlockingQueue<E>
Возвращает:
Integer.MAX_VALUE всегда

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, если эта очередь содержит указанный элемент

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 — если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди не позволяет добавить его в указанную коллекцию

clear

public void clear()
Атомарно удаляет все элементы из этой очереди. После возврата из этого вызова очередь будет пуста.
Определено в:
clear в интерфейсе Collection<E>
Переопределяет:
clear в классе AbstractQueue<E>

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

iterator

public Iterator<E> iterator()
Возвращает итератор по элементам этой очереди. Итератор возвращает элементы в произвольном порядке.

Возвращаемый итератор является слабо согласованным.

Определено в:
iterator в интерфейсе Collection<E>
Определено в:
iterator в интерфейсе Iterable<E>
Определено в:
iterator в классе AbstractCollection<E>
Возвращает:
итератор по элементам этой очереди

spliterator

public Spliterator<E> spliterator()
Возвращает Spliterator для обхода элементов этой очереди. Сплитератор обходит элементы в произвольном порядке (характеристика ORDERED не сообщается).

Возвращаемый сплитератор является слабо согласованным.

Spliterator сообщает характеристики Spliterator.SIZED и Spliterator.NONNULL.

Определено в:
spliterator в интерфейсе Collection<E>
Определено в:
spliterator в интерфейсе Iterable<E>
Примечание реализации:
Spliterator дополнительно сообщает характеристику Spliterator.SUBSIZED.
Возвращает:
Spliterator для обхода элементов этой очереди
С версии:
1.8

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
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

retainAll

public boolean retainAll(Collection<?> c)
Описание скопировано из класса: AbstractCollection
Оставляет в этой коллекции только элементы, содержащиеся в указанной коллекции (необязательная операция). Иными словами, удаляет из этой коллекции все элементы, которые не содержатся в указанной коллекции.
Определено в:
retainAll в интерфейсе Collection<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c — коллекция, содержащая элементы, которые следует сохранить в этой коллекции
Возвращает:
true, если в результате вызова эта коллекция изменилась
Исключения:
NullPointerException — если эта коллекция содержит один или несколько элементов null, а указанная коллекция не допускает элементы null (необязательно), либо если указанная коллекция равна null
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

forEach

public void forEach(Consumer<? super E> action)
Описание скопировано из интерфейса: Iterable
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не вызовет исключение. Если порядок итерации определен, действия выполняются в этом порядке. Исключения, вызванные действием, передаются вызывающему коду.

Поведение этого метода не определено, если действие приводит к побочным эффектам, изменяющим исходный источник элементов, за исключением случаев, когда переопределяющий класс задает политику параллельного изменения.

Определено в:
forEach в интерфейсе Iterable<E>
Параметры:
action — действие, выполняемое для каждого элемента
Исключения:
NullPointerException — если указанное действие равно null

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/PriorityBlockingQueue.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API