자바 소스 코드 분석 차단 대기 열 Array BlockingQueue 기능 안내

2504 단어
본 고 는 jdk 1.8 을 바탕 으로 분석 하고 자 한다.
차단 대기 열 은 자바 개발 에 자주 사용 되 는 데이터 구조 입 니 다.우선 대열 을 막 는 역할 이 무엇 인지 살 펴 보 자.대기 열 을 막 는 역할 은 원본 코드 의 주석 에서 알 아 보 는 것 이 가장 뚜렷 하고 정확 하 다.아래 그림.
Array BlockingQueue 는 배열 로 이 루어 진 경계 차단 대기 열 입 니 다.FIFO 기능 제공.대기 열 머리 에 있 는 요 소 는 대기 열 에 가장 오래 있 는 요소 이 고, 대기 열 끝 에 있 는 요 소 는 대기 열 에 있 는 시간 이 가장 짧 은 요소 입 니 다.새 요 소 는 대기 열 끝 에 삽입 되 며, 대기 열 에서 요 소 를 가 져 올 때 대기 열 머리 에서 가 져 옵 니 다.
이것 은 전통 적 인 경계 대기 열 입 니 다. 이 경계 대기 열 에 서 는 생산자 가 만 든 요소 와 소비자 가 얻 은 요 소 를 저장 하 는 고정 크기 의 배열 입 니 다.만 들 면 크기 를 바 꿀 수 없습니다.가득 찬 대기 열 에 요 소 를 추가 하려 고 시도 하면 작업 이 막 힙 니 다.빈 대기 열 에서 요 소 를 가 져 오 면 작업 이 막 힐 수 있 습 니 다.
이 종 류 는 대기 중인 생산 과 소비자 스 레 드 정렬 에 선택 할 수 있 는 공정 한 전략 을 제공 합 니 다.기본적으로 순 서 는 보장 되 지 않 는 다.단, fairness = true 로 만 든 대기 열 은 FIFO 특성 을 보증 할 수 있 습 니 다.공정 성 은 통상 적 으로 물동량 을 줄 이지 만 변성 을 줄 이 고 배 고 픔 을 피 할 수 있다.
/**
 * A bounded {@linkplain BlockingQueue blocking queue} backed by an
 * array.  This queue orders elements FIFO (first-in-first-out).  The
 * head of the queue is that element that has been on the
 * queue the longest time.  The tail of the queue is that
 * element that has been on the queue the shortest time. New elements
 * are inserted at the tail of the queue, and the queue retrieval
 * operations obtain elements at the head of the queue.
 *
 * 

This is a classic "bounded buffer", in which a * fixed-sized array holds elements inserted by producers and * extracted by consumers. Once created, the capacity cannot be * changed. Attempts to {@code put} an element into a full queue * will result in the operation blocking; attempts to {@code take} an * element from an empty queue will similarly block. * *

This class supports an optional fairness policy for ordering * waiting producer and consumer threads. By default, this ordering * is not guaranteed. However, a queue constructed with fairness set * to {@code true} grants threads access in FIFO order. Fairness * generally decreases throughput but reduces variability and avoids * starvation. * *

This class and its iterator implement all of the * optional methods of the {@link Collection} and {@link * Iterator} interfaces. * *

This class is a member of the * * Java Collections Framework. * * @since 1.5 * @author Doug Lea * @param the type of elements held in this collection */


좋은 웹페이지 즐겨찾기