多线程环境下安全的集合

多线程环境下安全的集合

List

/**
* 并发修改异常 多个线程同时操作一个不安全的集合
* <p>
* CopyOnWriteArrayList 写时复制技术
* add方法会先复制一个新数组 对新数组进行相关操作 操作完成之后合并到原数组去 独立写
*/
public class Demo01 {
public static void main(String[] args) {
//List list = new ArrayList(); //不安全
//List<String> list = new Vector<>(); //安全
//List<String> list = Collections.synchronizedList(new ArrayList<>()); //安全
List<String> list = new CopyOnWriteArrayList<>();//安全
for (int i = 0; i < 20; i++) {
new Thread(() -> {
list.add(UUID.randomUUID().toString().substring(0, 8));
System.out.println(list);
}, String.valueOf(i)).start();
}
}
}

Set

/**
* set 集合 多线程安全解决
*/
public class Demo02 {
public static void main(String[] args) {
//Set<String> set = new HashSet<>();//不安全
Set<String> set = new CopyOnWriteArraySet<>(); //安全
for (int i = 0; i < 20; i++) {
new Thread(() -> {
set.add(UUID.randomUUID().toString().substring(0, 8));
System.out.println(set);
}, String.valueOf(i)).start();
}
}
}

Map

/**
* map 集合 多线程环境安全解决方案
*/
public class Demo03 {
public static void main(String[] args) {
//Map<String, String> map = new HashMap<>();
Map<String, String> map = new ConcurrentHashMap<>();
for (int i = 0; i < 20; i++) {
String key = String.valueOf(i);
new Thread(() -> {
map.put(key,UUID.randomUUID().toString().substring(0, 8));
System.out.println(map);
}, String.valueOf(i)).start();
}
}
}
posted @   yishan99  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示