Java

ConcurrentHashMap 와 synchronizedMap 차이점

메모는나의열정 2023. 2. 12. 19:56
반응형

ConcurrentHashMap vs synchronizedMap

Java에서 동시에 여러 스레드가 접근할 수 있는 Map 컬렉션에 사용되는 두 개의 클래스로, ConcurrentHashMapsynchronizedMap이 있습니다. 하지만 ConcurrentHashMapsynchronizedMap은 각자 다른 기능과 성능을 가지고 있습니다.

ConcurrentHashMapsynchronizedMap맵 구조에 키-값 쌍을 저장하는 데 사용되는 두 Java 클래스입니다 . 그러나 구현 및 제공하는 스레드 안전 수준이 다릅니다.

ConcurrentHashMap여러 스레드가 맵에 동시에 액세스할 수 있도록 세분화된 잠금을 사용하는 맵 인터페이스의 스레드 안전 구현입니다. 맵의 각 세그먼트는 개별적으로 잠깁니다. 즉, 여러 스레드가 서로 다른 세그먼트에 액세스하는 한 동시에 맵을 읽고 쓸 수 있습니다. 따라서 synchronizedMap여러 스레드가 동시에 맵에 액세스할 때보다 성능이 향상됩니다.

synchronizedMap반면에 는 전체 맵에 대해 단일 잠금을 사용합니다. 즉, 한 번에 하나의 스레드만 맵에 액세스할 수 있습니다. 이로 인해 여러 스레드가 동시에 맵에 액세스할 때 잠금으로 인해 서로를 기다리게 되므로 성능이 저하될 수 있습니다.

요약하면 ConcurrentHashMap맵에 대한 액세스에 대해 더 나은 성능과 더 세분화된 제어를 제공하는 동시에 더 간단 synchronizedMap하고 덜 유연한 스레드 안전 구현을 제공합니다. 둘 중 하나를 선택할 때 애플리케이션의 동시성 수준과 맵에 액세스하기 위한 성능 요구 사항을 고려하는 것이 중요합니다.

ConcurrentHashMap

  • ConcurrentHashMap은 멀티 스레드 환경에서 동시에 접근할 수 있는 Map입니다.
  • ConcurrentHashMap은 스레드 안정성을 보장하기 위해 각 요소에 대한 동시성 제어 로직이 구현되어 있습니다.
  • 여러 스레드가 동시에 접근하더라도 데이터의 손상이나 문제가 발생하지 않습니다.
  • ConcurrentHashMap은 동기화 오버헤드가 적기 때문에 높은 성능을 제공합니다.

synchronizedMap

  • synchronizedMap은 멀티 스레드 환경에서 Map에 대한 접근을 동기화하는 Map 구현입니다.
  • synchronizedMap은 모든 메소드에 대해 동기화를 걸어 멀티 스레드 환경에서 Map의 접근을 안정시킵니다.
  • 하지만 동기화를 걸어두었기 때문에 멀티 스레드 환경에서 많은 요청이 들어오면 동시성이 떨어지게 되어 성능이 떨어집니다.

예제

다음은 ConcurrentHashMapsynchronizedMap의 예제입니다.

javaCopy code
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class Main {
    public static void main(String[] args) {
        // ConcurrentHashMap
        Map<String, Integer> concurrentHashMap = new ConcurrentHashMap<>();
        concurrentHashMap.put("A", 1);
        concurrentHashMap.put("B", 2);
        System.out.println("ConcurrentHashMap: " + concurrentHashMap);

        // synchronizedMap
        Map<String, Integer> synchronizedMap = Collections.synchronizedMap(new HashMap<>());
        synchronizedMap.put("A", 1);
        synchronizedMap.put("B", 2);
        System.out.println("SynchronizedMap: " + synchronizedMap);
    }
}

결과:

cssCopy code
ConcurrentHashMap: {A=1, B=2}
SynchronizedMap: {A=1, B=2}

ConcurrentHashMapsynchronizedMap 둘 다 동일한 동작을 하지만, ConcurrentHashMap은 높은 성능을 제공하며 synchronizedMap은 높은 동시성을 제공합니다. 특정 상황에 따라 둘 중 어떤 것을 사용하는 것이 더 좋은지 결정해야 합니다.

반응형

'Java' 카테고리의 다른 글

람다식이란?  (0) 2021.10.03