본문으로 건너뛰기
김신건의 로그

[Java] ConcurrentLinkedDeque

· 수정 · 📖 약 1분 · 213자/단어 #java #concurrent #deque #lock-free
ConcurrentLinkedDeque, java.util.concurrent.ConcurrentLinkedDeque, CLD, lock-free deque

정의

java.util.concurrent.ConcurrentLinkedDeque<E>lock-free Deque. ConcurrentLinkedQueue 의 양방향 버전. JDK 1.7 추가.

양 끝 모두에서 add/remove 가능, 모든 연산이 CAS 기반.

내부 구조

이중 연결 리스트 (prev, next 모두 volatile) 를 lock-free 알고리즘으로 관리. ConcurrentLinkedQueue 의 단방향보다 복잡하다.

복잡도

작업시간동시성
addFirst, addLast, offerFirst, offerLastamortized O(1)lock-free
pollFirst, pollLast, removeFirst, removeLastamortized O(1)lock-free
peekFirst, peekLastO(1)volatile read
sizeO(n), 부정확약함

사용 사례

  • 양 끝에서 동시 작업이 일어나는 큐 (예: 일부 work-stealing 패턴)
  • stack + queue 혼용 동시성

ConcurrentLinkedQueue 와의 선택

대부분의 경우 ConcurrentLinkedQueue 가 충분. 양쪽 끝 연산이 모두 필요할 때만 Deque 선택.

시나리오권장
FIFO 만ConcurrentLinkedQueue
양 끝 add/removeConcurrentLinkedDeque
Producer-Consumer (blocking)BlockingQueue 구현체

참고

이 글의 용어 (7개)
[Java] BlockingQueuejava
정의 는 요소를 가져올 때 비어 있으면 대기, 넣을 때 가득 차 있으면 대기 하는 thread-safe 큐 인터페이스. 생산자-소비자 (producer-consumer) 패턴의 …
[Java] Collectionjava
정의 는 그룹으로 묶인 객체들을 표현하는 최상위 인터페이스. JCF (Java Collections Framework) 의 입구이자, / / / 모두 이를 확장한다. 자체는 직접…
[Java] ConcurrentLinkedQueuejava
정의 는 lock-free 로 구현된 unbounded thread-safe . Michael & Scott 의 non-blocking queue 알고리즘 (1996) 기반. 가…
[Java] Iterablejava
정의 는 루프로 순회 가능한 모든 타입의 최상위 인터페이스. 단 하나의 추상 메서드, 를 정의한다. 인터페이스가 을 extends 하므로 , , , 등 모든 컬렉션이 자동으로 대…
[Java] Objectjava
정의 는 Java 의 모든 클래스의 최상위 부모 (root) 클래스. 가 명시되지 않은 클래스는 컴파일러가 자동으로 를 붙인다. 인터페이스는 클래스가 아니라 를 직접 상속하지는 …
덱 (Deque)algorithm
정의 Deque (덱, double-ended queue) 는 양쪽 끝에서 O(1) push/pop 이 가능한 선형 자료구조. 큐 + 스택의 일반화. 내부 구현은 대개 chunk…
큐 (Queue)algorithm
정의 큐 (Queue) 는 FIFO (First In, First Out) 순서로 원소를 관리하는 추상 자료구조입니다. (또는 ), (또는 ), 세 연산만 제공하며, 가장 먼저 …

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기