PriorityBlockingQueue<E> — 우선순위 기반 무제한 블로킹 큐

PriorityBlockingQueue<E> — 우선순위 기반 무제한 블로킹 큐

PriorityBlockingQueue<E>PriorityQueue 클래스와 동일한 정렬 규칙을 사용하면서 블로킹 검색 연산을 제공하는 무제한 블로킹 큐예요. 논리적으로는 무제한이지만, 리소스 고갈로 추가가 실패할 수 있어요(OutOfMemoryError 유발). 이 클래스는 null 요소를 허용하지 않아요. 자연 정렬에 의존하는 우선순위 큐는 비교할 수 없는 객체의 삽입도 허용하지 않아요(ClassCastException).

출처: Java API Reference

본문

이 클래스와 그 이터레이터는 CollectionIterator 인터페이스의 모든 선택적 메서드를 구현해요. iterator()가 제공하는 이터레이터와 spliterator()가 제공하는 Spliterator는 PriorityBlockingQueue 요소를 특정 순서로 순회한다는 보장이 없어요. 순서 있는 순회가 필요하면 Arrays.sort(pq.toArray())를 고려해 보세요. 또한 drainTo로 우선순위 순서대로 일부 또는 전체 요소를 다른 컬렉션으로 옮길 수 있어요.

이 클래스의 연산은 동일한 우선순위를 가진 요소의 순서에 대해 보장하지 않아요. 순서를 강제하려면 기본 우선순위 값의 동률을 깨는 보조 키를 쓰는 커스텀 클래스나 비교자를 정의하면 돼요. 예를 들어 comparable 요소에 FIFO 동률 해소를 적용하는 FIFOEntry 래퍼 클래스를 쓸 수 있어요.

생성자

PriorityBlockingQueue() — 기본 초기 용량(11)으로, 요소를 자연 정렬에 따라 정렬하는 큐를 만들어요.

PriorityBlockingQueue(int initialCapacity) — 지정 초기 용량으로 자연 정렬하는 큐를 만들어요. initialCapacity가 1보다 작으면 IllegalArgumentException을 던져요.

PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator) — 지정 초기 용량과 비교자로 정렬하는 큐를 만들어요. 비교자가 null이면 자연 정렬을 사용해요.

PriorityBlockingQueue(Collection<? extends E> c) — 주어진 컬렉션의 요소를 담은 큐를 만들어요. 컬렉션이 SortedSet이나 PriorityBlockingQueue면 같은 순서로 정렬되고, 아니면 자연 정렬을 사용해요.

주요 메서드

boolean add(E e) / boolean offer(E e) / void put(E e) — 요소를 큐에 삽입해요. 무제한이므로 false를 반환하거나 절대 블로킹하지 않아요. 요소가 큐의 정렬 규칙에 따라 비교될 수 없으면 ClassCastException, null이면 NullPointerException을 던져요.

boolean offer(E e, long timeout, TimeUnit unit) — 요소를 삽입해요. 무제한이라 절대 블로킹하지 않으므로 timeoutunit은 무시돼요.

E poll() — 헤드를 가져와 제거하거나 비어 있으면 null을 반환해요.

E take() throws InterruptedException — 헤드를 가져와 제거하고, 필요하면 요소가 생길 때까지 기다려요.

E poll(long timeout, TimeUnit unit) — 헤드를 가져와 제거하고, 지정 시간까지 요소를 기다려요.

E peek() — 헤드를 가져오되 제거하지 않아요.

Comparator<? super E> comparator() — 큐 요소를 정렬하는 비교자를 반환해요. 자연 정렬을 쓰면 null을 반환해요.

int size() — 컬렉션의 요소 수를 반환해요.

int remainingCapacity() — 용량 제한이 없으므로 항상 Integer.MAX_VALUE를 반환해요.

boolean remove(Object o) — 지정 요소의 단일 인스턴스를 제거해요.

boolean contains(Object o) — 지정 요소를 포함하면 true를 반환해요.

int drainTo(Collection<? super E> c) / int drainTo(Collection<? super E> c, int maxElements) — 요소를 우선순위 순서대로 주어진 컬렉션으로 옮겨요.

void clear() — 모든 요소를 원자적으로 제거해요.

Object[] toArray() / <T> T[] toArray(T[] a) — 요소를 담은 배열을 반환해요. 배열 요소는 특별한 순서가 없어요.

Iterator<E> iterator() — 특정 순서 없이 순회하는 약하게 일관된 이터레이터를 반환해요.

Spliterator<E> spliterator() — 특정 순서로 순회하지 않는(ORDERED 미보고) 약하게 일관된 Spliterator를 반환해요. SIZEDNONNULL을 보고하며, 추가로 SUBSIZED도 보고해요.

더 알아보기 (Learn more)