Concurrent Hashmap is a class that was introduced in jdk1.5. Concurrent hash map applies locks only at bucket level called fragment while adding or updating the map. So, a concurrent hash map allows concurrent read and write operation to the map.
Synchronized hashmap(Collection.syncronizedHashMap()) is a method of Collection framework. This method applies a lock on the entire collection. So, if one thread is accessing the map then no other thread can access the same map.
Sr. No. | Key | Concurrent hash map | Synchronized hashmap |
---|---|---|---|
1 | Implementation | It is a class that implements a Concurrent hash map and serializable interface. | It is a method in Collection class. |
2 | Lock mechanism | Locks the portion | Locks the whole map. |
3 | Performance | Concurrent hashmap allows concurrent read and write. So performance is relatively better than a synchronized map. | Multiple threads can't access the map concurrently. So, performance is relatively less than a concurrent hash map. |
4 | Null key | It doesn't allow null as a key or value. | It allows null as a key. |
5 | Concurrent modification exception | It doesn't throw concurrent modification exception. | Iterator return by synchronized map throws concurrent modification exception |
Example of 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); } }
Example of 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); } }