ConcurrentHashMap
Lock striping의 세밀한 동기화 방법을 사용
- 여러 스레드에서 공유하는 상태에 훨씬 대응이 잘됨
- 값을 읽어가는 연산에도 동시 처리가 가능하고 읽기와 쓰기 연산도 동시 처리가 가능함.
ConcurrentHashMap이 만들어낸 Iterator는 ConcurrentModificationException 이 발생하지 않음.
- size나 isEmpty 메서드의 의미가 약간 약해짐.
- 위 메서드가 리턴하는 시점에 컬렉션이 변경되었을 수도 있기 때문에, 정확한 값이라기 보다는 추정값으로 봐야함.
syncronizedMap 의 경우 한 시점에 하나의 스레드만 Map을 독점적으로 사용하지만
- ConcurrentHashMap의 경우 여러 스레드가 동시에 공유하여 사용하는 것이 가능하다.
- 이것은 단점이 될수도 있지만 동시성 향상 이라는 관점에서 수용할수 있는 수준이다.
- 그러나 한 시점에 하나의 스레드만 독점해서 사용해야 한다면 ConcurrentHashMap 적용할때 충분한 검토가 필요.
다음의 단일 연산이 추가됨
- put-if-absent
- remove-if-equal
- replace-if-equal
CopyOnWriteArrayList
- '변경할 때마다 복사' 되는 전략을 사용하여 동기화 작업이 필요없음.
- 컬렉션에 어떤 변경 작업을 가한다 해도 Iterator 를 뽑아낸 그 시점에 컬렉션에 들어있던 데이터를 정확하게 사용 가능
- 그러나 변경될때 마다 복사본이 만들어지기 때문에 성능에서 손해를 볼 수 있음.
- 변경작업보다 read 작업이 많은 경우 효과적