HashMap vs ConcurrentHashMap vs Collections.synchronizedMap(HashMap)

HashMap, ConcurrentHashMap和Collections.synchronizedMap(HashMap)有什么区别?

  • HashMap就是一个正常的Dictionary,不是线程安全的;

  • ConcurrentHashMap是线程安全的,它是通过将Map中的entry再分成segment,不同的segement使用不同的锁,来实现多线程安全快速访问的。但是如果不同的线程来访问同一个segment中的entry的话,还是要等上一个线程访问完成,才能继续;

  • Collections.synchronizedMap(HashMap)是通过将一个包装类,将HashMap的所有方法都synchronized住。