Java의 ConcurrentHashMap 대 HashTable

Mohammad Irfan 2023년10월12일
  1. Java에서 ConcurrentHashMap 만들기
  2. Java에서 HashTable 만들기
Java의 ConcurrentHashMap 대 HashTable

이 튜토리얼은 Java에서 ConcurrentHashMap과 Hashtable의 차이점을 소개합니다.

ConcurrentHashMap은 java.util.concurrent 프레임워크에 속하는 클래스입니다. ConcurrentMap과 Serializable 인터페이스를 구현합니다. 스레드로부터 안전한 데이터를 저장하는 데 사용됩니다. 여러 버킷을 사용하여 데이터를 저장합니다. 이것의 선언 구문은 다음과 같습니다.

public class ConcurrentHashMap<K, V>
    extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable

ConcurrentHashMap 키포인트

  • 스레드로부터 안전합니다.
  • 전체 맵 대신 세그먼트 수준에서 다중 잠금을 사용합니다.
  • 기본적으로 16개의 잠금을 사용합니다.
  • 업데이트에 대한 잠금에만 적용됩니다. 읽기의 경우 여러 스레드가 데이터에 액세스할 수 있습니다.

ConcurrentHashMap의 예를 보자.

Java에서 ConcurrentHashMap 만들기

이 예제에서는 String 및 Integer 유형의 데이터를 보유하는 ConcurrentHashMap을 생성했습니다. put() 메소드를 사용하여 요소를 추가하고 getKey()getValue() 메소드를 사용하여 각각 키와 값에 액세스했습니다. 아래의 예를 참조하십시오.

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class SimpleTesting {
  ConcurrentHashMap<String, Integer> hm = new ConcurrentHashMap<String, Integer>();
  public void AddScore(String name, int score) {
    hm.put(name, score);
  }
  public static void main(String[] args) {
    SimpleTesting simpleTesting = new SimpleTesting();
    simpleTesting.AddScore("Rohan", 95);
    simpleTesting.AddScore("Sohan", 85);
    simpleTesting.AddScore("Mohan", 93);
    simpleTesting.AddScore("Lohan", 91);
    System.out.println("Students Scores: ");
    for (Map.Entry<String, Integer> entry : simpleTesting.hm.entrySet()) {
      System.out.println(entry.getKey() + " - " + entry.getValue());
    }
  }
}

출력:

Students Scores: 
Lohan - 91
Mohan - 93
Sohan - 85
Rohan - 95

HashTable은 Java 컬렉션 프레임워크에 속하는 클래스입니다. 키 및 값 쌍에 데이터를 저장하는 데 사용됩니다. Map, Cloneable 및 Serializable 인터페이스를 구현합니다. 클래스 선언은 아래와 같습니다.

public class Hashtable<K, V> extends Dictionary<K, V> implements Map<K, V>, Cloneable, Serializable

HashTable 키포인트:

  • 전체 데이터에 대해 단일 잠금을 사용합니다.
  • 스레드로부터 안전합니다. 즉, 동기화됩니다.
  • null 키 또는 값을 허용하지 않습니다.

HashTable의 예를 보자.

Java에서 HashTable 만들기

이 예제에서는 문자열 및 정수 유형의 데이터를 저장하는 HashTable을 만들었습니다. put() 메소드를 사용하여 요소를 추가하고 getKey()getValue() 메소드를 사용하여 각각 키와 값에 액세스합니다. 아래의 예를 참조하십시오.

import java.util.Hashtable;
import java.util.Map;

public class SimpleTesting {
  Hashtable<String, Integer> hm = new Hashtable<String, Integer>();
  public void AddScore(String name, int score) {
    hm.put(name, score);
  }
  public static void main(String[] args) {
    SimpleTesting simpleTesting = new SimpleTesting();
    simpleTesting.AddScore("Rohan", 95);
    simpleTesting.AddScore("Sohan", 85);
    simpleTesting.AddScore("Mohan", 93);
    simpleTesting.AddScore("Lohan", 91);
    System.out.println("Students Scores: ");
    for (Map.Entry<String, Integer> entry : simpleTesting.hm.entrySet()) {
      System.out.println(entry.getKey() + " - " + entry.getValue());
    }
  }
}

출력:

Students Scores: 
Rohan - 95
Mohan - 93
Sohan - 85
Lohan - 91