0 votes
1 view
in Java by (4.1k points)

I have a Map which is to be modified by several threads concurrently.

There seem to be three different synchronized Map implementations in the Java API:

  • Hashtable

  • Collections.synchronizedMap(Map)

  • ConcurrentHashMap

From what I understand, Hashtable is an old implementation (extending the obsolete Dictionary class), which has been adapted later to fit the Map interface. While it is synchronized, it seems to have serious scalability issues and is discouraged for new projects.

But what about the other two? What are the differences between Maps returned by Collections.synchronizedMap(Map) and ConcurrentHashMaps? Which one fits which situation?

1 Answer

0 votes
by (46.1k points)

ConcurrentHashMap is designed for concurrency and improves performance while Collections.synchronizedMap(map) which is non-synchronized by sort can be synchronized by applying a wrapper using Collections.synchronizedMap(map). The most typical difference between ConcurrentHashMap and synchronized map in Java is that ConcurrentHashMap doesn't support null keys or null values while synchronized HashMap supports one null key.

For your requirements, use ConcurrentHashMap. It identifies concurrent modification of the Map from various threads without the need to block them. Collections.synchronizedMap(map) produces a blocking Map that will degrade performance, albeit assure consistency (if used properly).

Use the second option if you need to assure data flexibility, and each thread requires to have an up-to-date view of the map. Use the first if performance is critical, and every thread only inserts data to the map, which shows happening less frequently.

Related questions

0 votes
1 answer
+1 vote
1 answer
0 votes
1 answer
0 votes
1 answer
asked Jul 9, 2019 in Java by Krishna (2.6k points)
Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...