[Java] java.util.ConcurrentModificationException

해니·2023년 5월 16일

Java

목록 보기
3/34
post-thumbnail



| java.util.ConcurrentModificationException


반복자(Iterator)를 통해 컬렉션을 순회하고 있는 동안, 컬렉션의 구조가 수정되는 경우에 발생한다.




수정 전 코드

for(Map<String,Object> client : webClientList) {
		
		if(client.getOrDefault("session_id", "").equals(sessionId)) {
			webClientList.remove(client);
		}
		
	}

session id가 동일한 경우 webClientList에서 값을 제거하는 코드인데 ,
webClientList를 순회하면서 동시에 해당 요소를 제거하려고 하기 때문에 예외가 발생했다.
해당 예외를 피하기 위해서는 순회 중인 컬렉션에서 직접 요소를 제거하는 대신,
Iterator의 remove() 메서드를 사용하여 제거해야 한다고 한다.




수정 후 코드

Iterator<Map<String, Object>> iterator = webClientList.iterator();
while (iterator.hasNext()) {
    Map<String, Object> client = iterator.next();
    if (client.getOrDefault("session_id", "").equals(sessionId)) {
        iterator.remove();
    }
}

Iterator 객체를 사용하여 webClientList를 순회하고, iterator.remove()를 호출하여 요소를 안전하게 제거한다.



🚨 주의사항 🚨
Iterator의 remove() 메서드는 반드시 next() 메서드를 호출한 후에만 호출해야 한다.
그렇지 않으면 IllegalStateException 예외가 발생할 수





참고 사이트
https://aljjabaegi.tistory.com/533
https://hbase.tistory.com/322

profile
💻 ⚾️ 🐻

0개의 댓글