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