Java/공부공부

[Java] ConcurrentHashMap

phyho 2025. 6. 19. 21:06

 

ConcurrentHashMap

Java에서 멀티스레드 환경에서 안전하게 사용할 수 있도록 설계된 해시 기반의 Map.
모든 메서드에 synchronized를 거는 HashMap과 달리 필요한 범위에만 lock을 걸어 성능과 안정성 보장.

import java.util.concurrent.ConcurrentHashMap;

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();

map.put("apple", 3);
map.put("banana", 5);

int count = map.get("apple");

key - value 구성으로, key와 value 모두 null 불가.


 

putIfAbsent() 

지정한 key에 값이 없을 경우에만 새 값을 저장.

ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();

map.putIfAbsent("user", "aaaa"); // "user1" key값이 없으면 저장
map.putIfAbsent("user", "bbbb"); // "user1" key값이 있으니 무시

System.out.println(map.get("user")); // aaaa
  • key가 존재하지 않으면 → value를 저장하고 null 반환
  • key가 존재하면 → 기존 값 반환

 

computeIfAbsent()

지정한 key에 값이 없을 경우에만 함수 실행. 
computeIfAbsent(key, func)

ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();

// "user" key값이 없으면 함수 실행 → aaaa 저장
map.computeIfAbsent("user", key -> {
    return "aaaa";
});

// "user" key값이 있으니 실행되지 않고 무시
map.computeIfAbsent("user", key -> {
    return "bbbb";
});

System.out.println(map.get("user")); // aaaa