같은:
1. LinkedBlockingqueue 및 ArrayBlockingqueue 둘 다 Blockingqueue 인터페이스를 구현합니다.
2. LinkedBlockingqueue 및 ArrayBlockingqueue는 모두 차단 가능한 대기열입니다
재진입 락 및 조건은 내부적으로 생산 및 소비의 동기화를 보장하기 위해 사용됩니다.
대기열이 비어 있으면 소비자 스레드가 차단됩니다. 대기열이 가득 차면 생산자 스레드가 차단됩니다.
조건 메소드를 사용하여 동기화하고 통신합니다. () 및 신호 ()
다른:
1. 위 그림에서 볼 수 있듯이 잠금 장치는 다릅니다.
LinkedBlockingqueue의 잠금 장치는 분리되어 생산자의 잠금 퍼플락 및 소비자의 잠금 Takelock이 분리됩니다.
ArrayBlockingqueue 생산자와 소비자는 동일한 잠금 장치를 사용합니다.
2. 그들의 기본 구현 메커니즘도 다릅니다
LinkedBlockingqueue는 내부적으로 링크 된 목록 구조를 유지합니다
생산 및 소비 중에 삽입 또는 제거를 위해 노드 객체를 작성해야합니다. 큰 배치의 데이터가있는 시스템에서는 GC에 대한 압력이 커질 것입니다.
ArrayBlockingqueue는 내부적으로 배열을 유지합니다
생산 및 소비 중에 열거 개체는 직접 삽입 또는 제거되며 추가 객체 인스턴스가 생성되거나 파괴되지 않습니다.
3. 건축의 차이
LinkedBlockingqueue에는 기본 용량 크기가 있습니다. integer.max_value는 물론 지정된 용량 크기를 전달할 수도 있습니다.
ArrayBlockingqueue를 초기화 할 때 용량 값을 전달해야합니다.
당신은 그것에 의해 제공된 건축 방법을 보면 알 수 있습니다.
4. CLEAR () 메소드를 실행하십시오
LinkedBlockingqueue가 명확한 메소드를 실행하면 두 개의 잠금 장치가 추가됩니다.
5. 통계 요소 수
Atomicinteger 객체는 LinkedBlockingqueue에서 요소 수를 계산합니다.
ArrayBlockingqueue는 int 유형을 사용하여 요소를 계산합니다