[안드로이드] Collection을 사용 할 때 ConcurrentModificationException을 피하는 방법
링크 : http://www.javacodegeeks.com/2011/05/avoid-concurrentmodificationexception.html
자바 Collection 클래스는 다른 thread에서 iterator를 사용하여 루프를 돌고 있을 때, Collection이 변경되어지면, 이 때 iterator.next()를 호출하는 순간에 ConcurrentModificationException 예외를 발생합니다.
이 예외는 multi-thread 뿐만 아니라 단일 single-thread에서도 발생 할 수 있습니다.
multi-thread 환경에서 ConcurrentModificationException 회피하기
1. List를 새로운 List객체에 복사해라.
이 방법은 List의 개수가 적거나 보통이라면 괜찮은 방법입니다.
하지만 개수가 많으면 성능 저하의 원인이 될 수 있습니다.
2. 루프를 도는 코드를 syncchronized 블럭으로 감싸라.
이 방법은 multi-thread의 장점을 감소시키므로 추천하지 않는 방법입니다.
3. JDK 1.5 이상에서는 ConcurrentHashMap이나 CopyOnWriteArrayList 클래스를 사용해라.
이 방법은 가장 권장되는 방법입니다.
single-thread 환경에서 ConcurrentModificationException 회피하기
1. Concurrent Collection 클래스를 사용해라.
2. CopyOnWriteArrayList의 경우에는 리스트 내에서 변경을 수용하지 않는다.
3. ConcurrentHashMap의 경우에는 동작이 항상 같지 않다.