ConcurrentHashMap VS HashMap

JeongHoHyun·2025년 2월 8일

Java

목록 보기
17/23

ConcurrentHashMap vs HashMap 차이

두 클래스는 둘 다 Map 인터페이스를 구현하지만, 주요 차이점은 동시성 처리(Concurrency)와 관련이 있습니다.

  • HashMap은 동기화되지 않아서 데이터가 손실될 가능성이 크다.
  • ConcurrentHashMap은 멀티스레드 환경에서 안전하여 정확한 값을 유지한다.

HashMap

  • 멀티스레드 환경에서 안전하지 않음
    • 여러 스레드가 동시에 수정하면 ConcurrentModificationException이 발생할 수 있다.
  • 동기화되지 않음
    • 싱글 스레드 환경에서 빠른 성능을 제공하지만, 멀티 스레드 환경에서는 사용하기 어렵다.
  • null키와 null값을 허용
    • HashMap은 하나의 null키와 여러개의 null값을 가질 수 있다.
  • 비교적 빠름
    • 동기화 오버헤드가 없기 때문에 싱글 스레드 환경에서 ConcurrentHashMap보다 성능이 뛰어나다.

ConcurrentHashMap

  • 멀티스레드 환경에서 안전(thread-safe)
    • 내부적으로 세그먼트 기반 락(Striped Lock)을 사용하여 동기화를 최적화한다.
  • 등기화 블록을 줄여 성능 향상
    • 전체 맵을 잠그는 것이 아니라 일부분만 잠금.
  • null키와 null값을 허용하지 않음
    • NullPointerException 발생
  • 병렬 처리가 가능
    • 여러 스레드가 동시에 put() 및 get()을 수행할 수 있다.

🧹 정리

  • 싱글 스레드 환경에서는 HashMap이 더 빠르고 적절하다.
  • 멀티 스레드 환경에서는 ConcurrentHashMap을 사용해야 데이터손실을 방지할 수 있다.
  • null값을 지정해야 하는 경우 HashMap을 사용해야 한다.
  • 따라서 멀티스레드 환경에서는 ConcurrentHashMap, 싱글 스레드에서는 HashMap이 적절하다.

📌 멀티스레드에서 HashMap을 사용해야 하면?

  • Collections.synchronizedMap()을 사용할 수 있다.
Map<Integer, String> syncMap = Collections.synchronizedMap(new HashMap<>());
profile
Java Back-End 2022.11.01 💻~ing

0개의 댓글