- 동기화된 컬렉션(thread-safe collection) 병렬 처리 컬렉션
- synchronizedList(List list) → 동기화된 list 리턴
- synchronizedMap(Map<K,V> m) 동기화된 map 리턴
- Thread-safe 하지만 성능 문제
- synchronizedSet(Set s) 동기화된 set 리턴
- 동기화된 컬렉션은 멀티 스레드 환경에서 하나의 스레드가 요소를 안전하게 처리하게 하기 위해 컬렉션에 락을 건다. 따라서 다른 요소를 빠르게 처리하지 못한다. → 속도 측면에서 불리
- 따라서 자바8부터는 java.util.concurrent 패키지에서 두 가지 컬렉션을 제공
- ConcurrentHashMap
- HashMap의 non thread-safe 문제 해결
- synchronizedMap의 속도 문제 해결
- ConcurrentHashMap 은 대부분의 읽기 연산에는 락을 걸지 않고 쓰기 연산과 일부 읽기 연산에만 락 스트라이핑을 활용하고 있다.
- 락 스트라이핑이란 독립적인 객체를 여러 가지 크기의 단위로 묶어내고, 묶인 블록 단위로 락을 나누는 방법
- 시간복잡도 get : O(1) containsKey : O(1) next : O(h/n) h는 테이블 java 1.5 에서 나옴 특징 : thread-safe 보장하면서 SynchronizedMap 보다 속도가 빠르다 - null을 허용하지 않음
- ConcurrentLinkedQueue
- ConcurrentHashMap
동기화된 컬렉션(thread-safe collection) 병렬 처리 컬렉션
- synchronizedList(List list) → 동기화된 list 리턴
- synchronizedMap(Map<k,v> m) 동기화된 map 리턴 - Thread-safe 하지만 성능 문제가 있다.
- synchronizedSet(Set s) 동기화된 set 리턴
동기화된 컬렉션은 멀티 스레드 환경에서 하나의 스레드가 요소를 안전하게 처리하게 하기 위해 컬렉션에 락을 건다. 따라서 다른 요소를 빠르게 처리하지 못한다. 속도 측면에서 불리하다
따라서 자바8부터는 java.util.concurrent 패키지에서 두 가지 컬렉션을 제공한다.
- ConcurrentHashMap
- HashMap의 non thread-safe 문제 해결
- synchronizedMap의 속도 문제 해결
- ConcurrentHashMap 은 대부분의 읽기 연산에는 락을 걸지 않고 쓰기 연산과 일부 읽기 연산에만 락 스트라이핑을 활용하고 있다.
- 락 스트라이핑이란 독립적인 객체를 여러 가지 크기의 단위로 묶어내고, 묶인 블록 단위로 락을 나누는 방법
- 시간복잡도 get : O(1) containsKey : O(1) next : O(h/n) h는 테이블 java 1.5 에서 나옴 특징 : thread-safe 보장하면서 SynchronizedMap 보다 속도가 빠르다 - null을 허용하지 않음
- ConcurrentLinkedQueue
'언어 & 라이브러리 > 자바' 카테고리의 다른 글
[자바] 자바를 사용하는 이유 (0) | 2022.09.23 |
---|---|
[자바] 상속보다 합성을 사용해야 하는 이유 (0) | 2022.09.13 |
[자바] Long 타입 비교를 equals로 해야만 하는 이유 (0) | 2022.09.13 |
[자바] Double Brace Initialization (0) | 2022.04.05 |
자바 Optional이란 (1) | 2022.02.19 |
댓글