티스토리 뷰
컬렉션의 데이터를 변경하는 작업시 내부적으로 복사본을 하나 더 만들어 작업하는 방식
iterate 중에 add/remove 수행하면
- 비동기화 컬렉션의 경우 ConcurrentModificationException 을 발생시키고
- 동기화 컬렉션의 경우 락을 걸어 쓰레드가 동시접근 할 수 없도록 구현한다.
- 반면 Copy-on-write 방식은
iterate 진행중에 add 를 수행하면
동일한 데이터 복사본을 만들어 여기에 작업한다.
iterate 는 add 되기 전 데이터 원본 대상으로 진행되며, 작업이 끝나면 사라진다.
최종적으로 add 된 데이터 복사본만 남게된다.
두 명령 실행시점의 데이터를 별도로 가지고 있으니
락을 걸필요도 없고, 동시 접근에 의한 오류도 발생하지 않는다.
하지만 복사본을 생성하므로 성능에 문제가 된다.
따라서 크기가 작고, 반복읽기가 많은 데이터에 적합하며, 추가 삭제가 많다면 성능이 떨어짐.
* 자바에서 java.util.concurrent 패키지에
CopyOnWriteArraySet
CopyOnWriteArrayList
를 제공한다.
* 참고
http://enjoyjava.tistory.com/entry/Java-Collection-Framework-Overview
'SW개발 > Java' 카테고리의 다른 글
FTPClient NullPointerException (0) | 2019.02.13 |
---|---|
JUnit initializationError (0) | 2019.02.08 |
[종합] Collection 의 다양한 선택 (0) | 2018.12.18 |
TreeMap/ConcurrentSkipListMap 동기화 테스트 코드 (0) | 2018.12.18 |
[종합] Collection / 컬렉션 검색, 정렬, 복사, 추가, 삭제 등 (0) | 2018.12.18 |