Java中併發雜湊對映和同步雜湊對映的區別
Concurrent Hashmap 是在 jdk1.5 中引入的一個類。Concurrent hash map 在新增或更新對映時僅在稱為片段的桶級別應用鎖。因此,併發雜湊對映允許對對映進行併發讀寫操作。
Synchronized hashmap(Collection.syncronizedHashMap())是 Collection 框架的一種方法。此方法對整個集合應用鎖。因此,如果一個執行緒正在訪問對映,則任何其他執行緒都無法訪問同一對映。
序號 | 鍵 | 併發雜湊對映 | 同步雜湊對映 |
---|---|---|---|
1 | 實現 | 它是一個實現併發雜湊對映和可序列化介面的類。 | 它是 Collection 類中的一個方法。 |
2 | 鎖定機制 | 鎖定部分 | 鎖定整個對映。 |
3 | 效能 | 併發雜湊對映允許併發讀寫。因此,其效能相對優於同步對映。 | 多個執行緒無法併發訪問對映。因此,其效能相對低於併發雜湊對映。 |
4 | 空鍵 | 它不允許空作為鍵或值。 | 它允許空作為鍵。 |
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); } }
廣告