CopyOnWriteArrayList
지정된 컬렉션에 대한 추가 , 설정 , 제거 작업은 생성되는 내부 배열의 새 복사본을 생성합니다. 이렇게 하면 ConcurrentModificationException 을 포착하지 않습니다 .
배열을 복사할 때 스레드로부터 안전하지 않은 요소의 필드에 대한 액세스를 포함하여 객체에 대한 참조만 복사된다는 점을 기억하십시오. 이러한 컬렉션은 쓰기 작업 수가 최소인 경우에 가장 잘 사용됩니다.

CopyOnWriteArrayList<E>는 CopyOnWrite 알고리즘을 기반으로 구현된 ArrayList의 스레드로부터 안전한 아날로그입니다추가 메서드 및 생성자는 아래에 설명되어 있습니다.
CopyOnWriteArrayList(E[] toCopyIn) | 배열을 입력으로 사용하는 생성자입니다. |
int indexOf(E e, int 인덱스) | 지정된 인덱스에서 시작하여 찾은 첫 번째 요소의 인덱스를 반환합니다. |
int lastIndexOf(E e, int 인덱스) | 지정된 인덱스에서 시작하여 역방향 검색에서 찾은 첫 번째 요소의 인덱스를 반환합니다. |
부울 addIfAbsent(E e) | 컬렉션에 없는 경우 요소를 추가합니다. equals 메서드는 요소를 비교하는 데 사용됩니다 . |
int addAllAbsent(Collection<? extends E> c) | 컬렉션에 없는 경우 요소를 추가합니다. 추가된 요소의 수를 반환합니다. |
ConcurrentMap 인터페이스
다중 스레딩 및 확장성을 지원하여 HashMap 및 TreeMap 구현을 개선했습니다 .

ConcurrentMap<K, V>는 추가적인 원자 연산으로 Map을 확장하는 인터페이스입니다
V putIfAbsent(K 키, V 값) | 키가 컬렉션에 없는 경우에만 새 키-값 쌍을 추가합니다. 주어진 키의 이전 값을 반환합니다. |
부울 제거(객체 키, 객체 값) | 지정된 키가 Map의 지정된 값과 일치하는 경우에만 키-값 쌍을 제거합니다. 요소가 성공적으로 제거된 경우 true를 반환합니다. |
부울 대체(K 키, V oldValue, V newValue) | 이전 값이 Map의 지정된 값과 일치하는 경우에만 키로 이전 값을 새 값으로 바꿉니다. 값이 새 값으로 대체된 경우 true를 반환합니다. |
V 대체(K 키, V 값) | 키가 값과 연결된 경우에만 키로 이전 값을 새 값으로 바꿉니다. 주어진 키의 이전 값을 반환합니다. |
ConcurrentHashMap<K, V> - 여기에서 데이터는 키 해시로 구분되는 세그먼트 형식으로 표시됩니다. 결과적으로 액세스가 필요한 경우 개체가 아닌 세그먼트가 잠깁니다. Iterator는 ConcurrentModificationException을 발생시키지 않으며특정 기간 동안의 데이터를 나타냅니다.
ConcurrentHashMap 구현
ConcurrentHashMap<K, V> - 여기서 데이터는 키 해시로 분류된 세그먼트 형식으로 표시됩니다. 결과적으로 데이터 액세스는 하나의 개체가 아닌 세그먼트에 의해 잠깁니다. 또한 반복자는 특정 시간 조각에 대한 데이터를 나타내며 ConcurrentModificationException 을 throw하지 않습니다 .
ConcurrentNavigableMap<K,V> - NavigableMap 인터페이스를 확장하고 ConcurrentNavigableMap 을 반환합니다. 모든 이터레이터는 사용하기에 안전하며 ConcurrentModificationException 을 발생시키지 않습니다.
ConcurrentSkipListMap<K, V>는 멀티스레딩을 위한 TreeMap과 유사합니다. 데이터는 키별로 정렬되며containsKey,get,put,remove및 기타 유사한 작업에 대해 평균 log(N) 성능이 보장됩니다.
ConcurrentSkipListSet<E>는 ConcurrentSkipListMap 기반의 Set 인터페이스 구현입니다.
GO TO FULL VERSION