ArrayBlockingQueue — 배열 기반 경계 블로킹 큐

ArrayBlockingQueue — 배열 기반 경계 블로킹 큐

배열이 지원하는 경계(bounded) 블로킹 큐예요.

출처: Java API Reference

본문

시그니처

public class ArrayBlockingQueue<E> extends AbstractQueue<E>
    implements BlockingQueue<E>, Serializable

타입 매개변수: E — 이 큐에 담긴 요소의 타입.

설명

배열이 지원하는 경계 블로킹 큐예요. 이 큐는 요소를 FIFO(선입선출)로 정렬해요. 큐의 머리(head)는 큐에 가장 오래 있었던 요소이고, 꼬리(tail)는 큐에 가장 짧게 있었던 요소예요. 새 요소는 꼬리에 삽입되고 큐 검색 연산은 머리에서 요소를 얻어요.

이것은 전형적인 "경계 버퍼(bounded buffer)"로, 고정 크기 배열이 생산자가 삽입하고 소비자가 추출한 요소를 보관해요. 한 번 생성되면 용량을 바꿀 수 없어요. 가득 찬 큐에 요소를 put하려는 시도는 연산을 블로킹하고, 빈 큐에서 요소를 take하려는 시도도 마찬가지로 블로킹해요.

이 클래스는 대기 생산자·소비자 스레드를 정렬하기 위한 선택적 공정성(fairness) 정책을 지원해요. 기본적으로 이 정렬은 보장되지 않아요. 그러나 fairnesstrue로 설정해 생성된 큐는 FIFO 순서로 스레드에 접근을 부여해요. 공정성은 일반적으로 처리량을 낮추지만 변동성을 줄이고 기아(starvation)를 피하게 해 줘요.

이 클래스와 그 iterator는 CollectionIterator 인터페이스의 모든 선택적 메서드를 구현해요. 이 클래스는 Java Collections Framework의 구성원이에요.

주요 메서드

  • put(E e) — 지정한 요소를 이 큐에 삽입하고, 공간이 생길 때까지 기다려요.
  • take() — 이 큐의 머리를 검색·제거하고, 요소가 사용 가능해질 때까지 필요하면 기다려요.
  • offer(E e) — 용량 위반 없이 즉시 가능하면 지정한 요소를 이 큐에 삽입해요.
  • poll() — 이 큐의 머리를 검색·제거하거나, 비어 있으면 null을 반환해요.
  • peek() — 이 큐의 머리를 검색하되 제거하지 않거나, 비어 있으면 null을 반환해요.
  • size() — 이 큐의 요소 수를 반환해요.
  • remainingCapacity() — 이상적인 조건에서(메모리·리소스 제약 없이) 이 큐가 추가로 받아들일 수 있는 요소 수를 반환해요.
  • clear() — 이 큐에서 모든 요소를 원자적으로 제거해요.

더 알아보기 (Learn more)