English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Javaにおける並行ハッシュマップと同期ハッシュマップの違い

Javaの並行Hashmapはjdk1.5に導入されたクラス。並行ハッシュマップは、追加や更新時に呼ばれる「バケット」と呼ばれるストレージレベルでロックを適用します。したがって、並行ハッシュマップはマップに対する並行読み書き操作を許可します。 

同期ハッシュマップ(Collection.syncronizedHashMap())は Collection フレームワークのメソッドの 1 つです。このメソッドは、全体の集合にロックを適用します。したがって、1 つのスレッドがこのマップにアクセスしている場合、他のスレッドは同じマップにアクセスすることができません。 

番号キー並行ハッシュマップ同期ハッシュマップ
1
実装
それは並行ハッシュマップとシリアライズインターフェースを実装するクラスです。 
それは Collection クラスのメソッドの 1 つです。  
2
ロック構造
部分をロックします。
マップ全体をロックします。 
3
パフォーマンス
並行ハッシュマップは、並行読み書きを許可します。したがって、パフォーマンスは同期マップよりも良いです。 
複数のスレッドが同時にマップにアクセスすることができません。したがって、パフォーマンスは並行ハッシュマップに比べて相対的に低です。
4
空のキー
null をキーや値として使用することは許可されません。 
それは null をキーとして許可します。
5 
並行修正例外
それは引き起こしません。 
同期マップのイテレータは、並行修正例外を引き起こします

同期マップの例

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");
      //同期マップの作成
      Map<Integer,String> syncmap = Collections.synchronizedMap(laptopmap);
      System.out.println("Synchronized map is : "+syncmap);
   }
}

ConcurrentHashMap---の例

public class ConcurrentHashMap---Example {
   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);
   }
}