상세 컨텐츠

본문 제목

[Java] java.util.ConcurrentModificationException: null

Java

by 강정_DEV 2023. 3. 30. 14:45

본문

728x90

java.util.ConcurrentModificationException: null

다른 곳에 파견을 갔다 오니 우리 팀 의 오래된 프로젝트들의 DB를 오라클만 쓰던걸 PostgreSQL도 쓸 수 있도록 작업 중이었다. 그래서 PostgreSQL로 SQL을 변경하면서 기능이 동작하나 확인하고 있었는데, 기능 하나에서 오류가 발생했다.

ConcurrentModificationException이 발생했는데 번역하면 동시 수정 예외... 뭔가 HashMap을 사용하는 중에 실시간으로 인덱스가 수정이 발생하면서 나온 예외처리 같다.

 

발생한 부분을 보면 대강 보면 아래와 같은 형식이었다.

Executors.newSingleThreadExecutor(threadFactory).submit(() -> {
    try {
        this.totStatService.removeData(paramMap);
        for (int i=0; i<datas.size(); i++) {
        	//Map<String, Object> data = datas.get(i); 	//before
        	Map<String, Object> data = new HashMap<>(datas.get(i)); //after
            ...

        }
    } catch (Exception e) {
    	...
    } finally {
        ...
    }
});

원래 반복문 내부에 선언한 메소드 내부에서 data를 가공하다가 발행한 문제였지만 Map<String, Object> data = datas.get(i); 부분만 수정하면 될 것 같았다.

검색해 보니 순회하는 부분을 수정한다거나, 방식을 바꾸는 등 여러 방법이 있는 것 같았지만 나는 그냥 단순하게 생각해서 new HashMap<>(datas.get(i));로  data에 대해서 초기화를 하도록 수정을 하였고, 정상적으로 동작하는 걸 확인할 수 있었다.

 

그나저나 오라클에선 문제없이 몇 년간 사용되던 기능으로 알고 있는데 왜 갑자기 이런 이슈가 나온 건지... PostgreSQL와는 관계가 없어보이는 문제인데, 코드를 한번 점검해보고 싶으나... 역시 다른 프로젝트를 진행하면서 하다 보니 뭔가 이 오래된 프로젝트를 재정비할 시간이 없다는 게 아쉽다.

 

반응형

관련글 더보기

댓글 영역