상황
단순히 enhanced for loop ( 15줄과 같은 반복문 ) 를 쓰면서 제거하는 예제인데, 멀티쓰레드에서나 보던 ConcurrentModificationException이 발생하였다. 도대체 왜???
remove() 함수를 따라가다 보면 checkForComodification() 이라는 함수를 확인할 수 있다.
expectedModCount는 리스트의 데이터 변경 여부를 체크하기 위한 변수이다.
remove()에서 호출하는 fastRemove()에서 modCount를 증가시킨 상태에서 Iterator의 next()가 호출 되면 위의 예외를 던지게 된다.
( fail-fast???)
ConcurrentModificationException의 정의
This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible.
'Java' 카테고리의 다른 글
NIO 제대로 파해쳐보자 (0) | 2017.12.05 |
---|---|
JAVA File I/O에 관하여 (0) | 2017.11.28 |
Memory leak 문제 해결 (0) | 2017.09.18 |
ClassNotFoundException ( 클래스 로더 정리 ) (0) | 2017.09.14 |
export Jar (0) | 2017.08.21 |