PHpullh
학습 라이브러리/Java/ConcurrentHashMap

JAVA · 컬렉션

ConcurrentHashMap

멀티스레드 환경에서 안전한 ConcurrentHashMap의 원리와 사용법입니다.

컬렉션고급ConcurrentHashMap동시성스레드안전병렬

핵심 설명

멀티스레드 환경에서 안전한 ConcurrentHashMap의 원리와 사용법입니다.

Java code

import java.util.concurrent.*;
import java.util.*;

public class ConcurrentHashMapDemo {
    public static void main(String[] args) throws Exception {
        ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();

        // 원자적 연산 (스레드 안전)
        map.put("counter", 0);
        map.compute("counter", (k, v) -> v + 1); // 원자적 갱신
        map.merge("counter", 1, Integer::sum);    // 원자적 병합
        map.putIfAbsent("new", 100);

        // 병렬 벌크 연산 (Java 8+)
        // parallelismThreshold: 이 크기 이상이면 병렬 처리
        map.put("Alice", 90);
        map.put("Bob", 85);
        map.put("Charlie", 95);

        // forEach 병렬
        map.forEach(1, (key, val) ->
            System.out.println(key + "=" + val));

        // search 병렬 — null이 아닌 첫 결과 반환
        String found = map.search(1, (key, val) ->
            val > 90 ? key : null);
        System.out.println("90점 초과: " + found);

        // reduce 병렬
        int total = map.reduce(1,
            (key, val) -> val,
            Integer::sum);
        System.out.println("총점: " + total);

        // 주의: size()는 근사값!
        // mappingCount()가 더 정확
        System.out.println("크기: " + map.mappingCount());
    }
}

학습 팁

ConcurrentHashMap은 세그먼트 단위 잠금으로 높은 동시성을 제공합니다. Collections.synchronizedMap()보다 훨씬 빠릅니다.

주의할 점

ConcurrentHashMap은 key와 value에 null을 허용하지 않습니다. HashMap과 다르니 주의하세요.

자주 묻는 질문

ConcurrentHashMap란 무엇인가요?

멀티스레드 환경에서 안전한 ConcurrentHashMap 의 원리와 사용법입니다.

ConcurrentHashMap 학습 시 주의할 점은 무엇인가요?

ConcurrentHashMap 은 key와 value에 null 을 허용하지 않습니다. HashMap 과 다르니 주의하세요.