자바 에서 Priority BlockingQueue 의 입단 지식 총화

Priority BlockingQueue 에 요 소 를 추가 하 는 것 역시 네 가지 방법 이 있 는데,나무 모양 의 구조 이기 때문에 삽입 방법 에 도 변화 가 있어 아래 에서 위로 의 조작 과정 이다.입단 규칙 에 있어 서 우리 가 주의해 야 할 세 가지 요점 이 있다.Priority BlockingQueue 의 입단 방법 은 주로 offer(E)를 통 해 이 루어 지기 때문에 우 리 는 이런 방법 에 대해 주요 설명 을 한다.
1.입단 규칙
(1)기본 삽입 규칙 에 새로 추 가 된 요 소 는 작은 지붕 더미 의 성질 을 파괴 할 수 있 으 므 로 조정 이 필요 합 니 다.
(2)조정 과정 은 끝부분 에 표 시 된 위치 부터 추 가 된 요 소 를 현재 점 의 부모 노드 의 내용 과 비교 하고 교환 하 며 부모 노드 의 내용 이 모두 하위 노드 의 내용 보다 작 을 때 까지 한다.
(3)기본 적 인 삭제 조정 에서 먼저 상단 아래 표 와 맨 끝의 요소 내용 을 가 져 옵 니 다.상단 의 위치 부터 꼬리 요소 의 내용 을 현재 점 의 좌우 부분 노드 에서 작은 것 과 아래로 교환 합 니 다.요소 의 내용 이 좌우 부분 노드 의 어느 것 보다 작 거나 같 을 때 까지 판단 합 니 다.
2.입단 방법
입단 방법 은 add(E),put(E),offer(E,timeout,TimeUnit),offer(E)가 있다.

public void put(E e) {
  offer(e); // never need to block
}
public boolean offer(E e) {
  //      
  if (e == null)
    throw new NullPointerException();
  //   
  final ReentrantLock lock = this.lock;
  lock.lock();
  //      
  int n, cap;
  Object[] array;
  //        
  while ((n = size) >= (cap = (array = queue).length))
    //    
    tryGrow(array, cap);
  try {
    //     
    Comparator<? super E> cmp = comparator;
    //           
    if (cmp == null)
      //   
      siftUpComparable(n, e, array);
    else
      //             
      siftUpUsingComparator(n, e, array, cmp);
    //     +1
    size = n + 1;
    //         
    notEmpty.signal();
  } finally {
    //   
    lock.unlock();
  }
  return true;
}
앞의 세 가지 방법 은 내부 적 으로 모두 offer(e)방법 을 통 해 이 루어 진 것 임 을 알 수 있다.

좋은 웹페이지 즐겨찾기