本節(jié)介紹一個常用的并發(fā)容器 - ConcurrentHashMap,它是HashMap的并發(fā)版本,與HashMap相比,它有如下特點:
并發(fā)安全
直接支持一些原子復(fù)合操作
支持高并發(fā)、讀操作完全并行、寫操作支持一定程度的并行
與同步容器Collections.synchronizedMap相比,迭代不用加鎖,不會拋出ConcurrentModificationException
弱一致性
我們分別來看下。
并發(fā)安全
我們知道,HashMap不是并發(fā)安全的,在并發(fā)更新的情況下,HashMap的鏈表結(jié)構(gòu)可能形成環(huán),出現(xiàn)死循環(huán),占滿CPU,我們看個例子:
public static void unsafeConcurrentUpdate() { final Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < 100; i++) { Thread t = new Thread() { Random rnd = new Random(); &nb