반응형
java.util.ConcurrentModificationException 원인 및 처리방법
java.util.ConcurrentModificationException 이 발생하는 원인과 처리방법에 대해 알아보겠습니다.
해당 Exception 은 대부분 Collection 객체에 remove 메소드 호출 시 발생을 합니다.
List 의 경우
List<int> list = new ArrayList<int>();
list.add(1);
list.add(2);
list.add(3);
for(Integer i : list){
list.remove(i);
}
Set 의 경우
Set<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
for(Iterator<Integer> itr = set.iterator(); itr.hasNext();){
int i = itr.next();
if(i == 2) set.remove(i);
}
결론적으로 말하자면 엘리먼트의 인덱스가 실시간으로 변하기 때문에 발생하는 이벤트 입니다.
Length가 변경되면서 해당 인덱스의 값이 null 이 되기 때문에 발생하는 것이죠.
이를 해결하기 위해서는 Iterator를 사용하여야 하며,
itr.next() 의 remove가 아니라 itr 자체에 remove 를 해주셔야 합니다.
Set의 경우 수정 코드
Set<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
for(Iterator<Integer> itr = set.iterator(); itr.hasNext();){
int i = itr.next();
if(i == 2) {
itr.remove();
}
}
반응형
'Programing > JAVA' 카테고리의 다른 글
JVM 모니터링 Java 메모리 CPU 모니터링 프로그램 VisualVM (0) | 2021.04.21 |
---|---|
Java 병렬처리를 위한 RecursiveAction (0) | 2020.08.13 |
Java 로컬과 tomcat 배포 시 한글 인코딩 문제 해결 (0) | 2020.01.14 |
Java 진짜 모든 공백 제거 정규식 Remove All Whitespace in Java regular expression (0) | 2019.11.26 |
Jedis subscribe 구현 시 다음 로직 실행 안되는 문제 (0) | 2019.11.05 |
댓글