본문으로 바로가기
COMMUNITY모든 이야기

Java HashMap의 computeIfAbsent 내에서 동일 Map 수정 시 ConcurrentModificationException 발생

빗방울 2026.10.31 11:12 2분 읽기 조회 14 · 추천 2

Map의 특정 키에 해당하는 리스트가 없을 경우 생성하고, 생성된 리스트에 즉시 요소를 추가하는 로직을 구현 중입니다.

코드:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Map<String, List<String>> map = new HashMap<>();
        map.put("key1", new ArrayList<>());

        map.computeIfAbsent("key1", k -> {
            map.put("key2", new ArrayList<>()); // 내부에서 Map 수정
            return new ArrayList<>();
        });
    }
}

오류: java.util.ConcurrentModificationException

시도: 1. HashMap 대신 ConcurrentHashMap으로 변경하여 테스트했으나, 로직 설계상 기본 HashMap을 유지해야 하는 상황입니다.

2. computeIfAbsent 외부에서 값을 먼저 체크하고 put 하는 방식으로 변경하면 해결되나, 원자적 처리를 위해 computeIfAbsent를 사용하고자 합니다.

질문: computeIfAbsent의 mapping function 내부에서 동일한 Map 객체의 구조를 변경할 때 발생하는 ConcurrentModificationException을 방지하면서 원자성을 유지할 수 있는 방법이 있습니까?

모든 이야기1456

가벼운 안부부터 깊은 생각까지, 함께 나눠요.

글쓰기
총 1456개의 이야기
댓글