오늘은 전에 사둔 spring 강의를 마저 보면서 새로운 해시맵인 ConcurrnetHashMap을 알게 되어서 ConcurrnetHashMap이 무엇인지 알아볼 것이다.
Map은 Java 컬렉션 프레임워크의 인터페이스로, 키(Key)와 값(Value) 쌍을 저장하는 자료구조입니다.
put(key, value) : 데이터 추가get(key) : 키에 해당하는 값 조회remove(key) : 데이터 삭제containsKey(key) : 특정 키 존재 여부 확인Java에는 다양한 Map 구현체가 존재하며, 각기 다른 특성과 사용 목적이 있습니다.
Map 구현체null 키 1개와 null 값 여러 개 허용HashMap과 유사하지만, 모든 메서드가 동기화 처리됨MapHashtable보다 효율적 (버킷 단위로 락을 걸어 성능 향상)null 키와 null 값은 허용하지 않음get()은 락 없이 진행 → 빠른 조회 가능null 키와 null 값은 허용하지 않음import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args) {
// ConcurrentHashMap 생성
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
// 데이터 추가
map.put("apple", 10);
map.put("banana", 20);
// 데이터 조회
System.out.println("apple: " + map.get("apple")); // apple: 10
// 값 수정 (동기적으로 안전하게 처리)
map.compute("apple", (k, v) -> v + 1);
System.out.println("apple after update: " + map.get("apple")); // apple after update: 11
// 키 존재 여부 확인
if (map.containsKey("banana")) {
System.out.println("banana exists!");
}
// 멀티스레드 환경에서 안전하게 접근 가능
Runnable task = () -> {
for (int i = 0; i < 5; i++) {
map.merge("banana", 1, Integer::sum);
}
};
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
}
}