Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java의 동시 해시 맵과 동기화된 해시 맵의 차이점

<시간/>

Concurrent Hashmap은 jdk1.5에서 도입된 클래스입니다. 동시 해시 맵은 맵을 추가하거나 업데이트하는 동안 프래그먼트라는 버킷 수준에서만 잠금을 적용합니다. 따라서 동시 해시 맵은 맵에 대한 동시 읽기 및 쓰기 작업을 허용합니다.

동기화된 해시맵(Collection.syncronizedHashMap())은 컬렉션 프레임워크의 메서드입니다. 이 메서드는 전체 컬렉션에 잠금을 적용합니다. 따라서 한 스레드가 맵에 액세스하는 경우 다른 스레드는 동일한 맵에 액세스할 수 없습니다.

Sr. 아니요. 동시 해시 맵 동기화된 해시맵
1
구현
Concurrent 해시 맵과 직렬화 가능한 인터페이스를 구현하는 클래스입니다.
Collection 클래스의 메소드입니다.
2
잠금 메커니즘
부분을 잠급니다.
전체 지도를 잠급니다.
3
성능
동시 해시맵은 동시 읽기 및 쓰기를 허용합니다. 따라서 성능은 동기화된 맵보다 상대적으로 우수합니다.
여러 스레드가 동시에 지도에 액세스할 수 없습니다. 따라서 성능은 동시 해시 맵보다 상대적으로 낮습니다.
4
널 키
null을 키나 값으로 허용하지 않습니다.
null을 키로 허용합니다.
5
동시 수정 예외
동시 수정 예외를 던지지 않습니다.
동기화된 맵에 의한 반복자 반환은 동시 수정 예외를 던집니다.

SynchronizedMap의 예

public class SynchronizedMapExample {
   public static void main(String[] args) {
      Map<Integer,String> laptopmap = new HashMap<Integer,String>();
      laptopmap.put(1,"IBM");
      laptopmap.put(2,"Dell");
      laptopmap.put(3,"HCL");
      // create a synchronized map
      Map<Integer,String> syncmap = Collections.synchronizedMap(laptopmap);
      System.out.println("Synchronized map is : "+syncmap);
   }
}

ConcurrentHashMap의 예

public class ConcurrentHashMapExample {
   public static void main(String[] args) {
      //ConcurrentHashMap
      Map<Integer,String> laptopmap = new ConcurrentHashMap<Integer,String>();
      laptopmap.put(1,"IBM");
      laptopmap.put(2,"Dell");
      laptopmap.put(3,"HCL");
      System.out.println("ConcurrentHashMap is: "+laptopmap);
   }
}