在多线程下会有ConcurrentModificationException并发修改异常。
对于list的安全集合
ArrayList是线程不安全的
拿安全的list有如下几种
-
vector() List list = new Vector();
-
Collections工具类
List list = Collections.synchronizedList(new ArrayList<>()) -
JUC包
List list = new CopyOnWriteArrayList<>();
CopyOnWriteArrayList底层是Arrays.copyof()数组复制,写入的时候复制,读取的时候固定.
对于set的安全集合
HashSet多线程下不安全
那安全的set有如下几种:
-
Collections工具类
Set set = Collections.synchronizedSet(new HashSet<>()); -
JUC包
Set set = new CopyOnWriteArraySet<>();
对于map的安全集合
HashMap是不安全的
-
Collections工具类
Map<String, Object> map = Collections.synchronizedMap(new HashMap<>()); -
JUC包
Map<String, Object> map = new concurrentHashMap<>();