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 과 다르니 주의하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.