ArrayList、HashSet、HashMap是我们常用的三个集合,但是如果同一个集合对象被多个线程调用时,很容易出现
Java.util.ConcurrentModificationException并发修改异常

一、解决ArrayList并发问题
有如下解决方案
| Vector | Collections.synchronizedList() | CopyOnWriteArrayList() | |
|---|---|---|---|
| 原理 | synchronized | synchronized | Lock |
| 相对性能 | 低 | 低 | 高 |
public static void main(String[] args) {
/**
* List<String> list = new ArrayList<>(); 不安全
* 【解决方案】
* 1、List<String> list = Collections.synchronizedList(new ArrayList<>());
* 2、List<String> list = new Vector<>();
* 3、List<String> list = new CopyOnWriteArrayList<>();
*/
List<String> list = new CopyOnWriteArrayList<>();
for (int i = 0; i < 20; i++) {
new Thread(() -> {
list.add(UUID.randomUUID().toString().substring(0, 5));
System.out.println(list);
}).start();
}
}
二、解决HashSet并发问题
有如下解决方案
| Collections.synchronizedSet() | CopyOnWriteArraySet() | |
|---|---|---|
| 原理 | synchronized | Lock |
| 相对性能 | 低 | 高 |
public static void main(String[] args) {
/**
* Set<String> set = new HashSet<>(); 不安全
* 【解决方案】
* 1、Set<String> set = Collections.synchronizedSet(new HashSet<>());
* 2、Set<String> set = new CopyOnWriteArraySet<>();
*/
Set<String> set = new CopyOnWriteArraySet<>();
for (int i = 0; i < 20; i++) {
new Thread(() -> {
set.add(UUID.randomUUID().toString().substring(0, 5));
System.out.println(set);
}).start();
}
}
三、解决HashMap并发问题
有如下解决方案
| HashTable | Collections.synchronizedMap() | ConcurrentHashMap() | |
|---|---|---|---|
| 原理 | synchronized | synchronized | Lock |
| 相对性能 | 低 | 低 | 高 |
public static void main(String[] args) {
/**
* Map<String> map = new HashMap<>(); 不安全
* 【解决方案】
* 1、
* 2、Map<String, String> map = Collections.synchronizedMap(new HashMap<>());
* 3、Map<String, String> set = new ConcurrentHashMap<>();
*/
Map<String, String> map = new ConcurrentHashMap<>();
for (int i = 0; i < 20; i++) {
new Thread(() -> {
}).start();
}
}
好啦,以上!
最后修改时间:2022-05-13 08:55:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




