JUC之集合类不安全

List不安全:

并发下,ArrayList是不安全的,报并发修改异常:ConcurrentModificationException

解决方案:Vector,

Collections.synchronizedList(new ArrayList<>());

concurrent包下的CopyOnWriteArrayList,CopyOnWrite写入时复制,COW,计算机程序设计领域的一种优化策略

多线程调用的时候,list,读取的时候,固定的,写入 (覆盖)

在写入的时候避免覆盖,造成数据问题。

读写分离

Set不安全:

public class SetTest{

public static void main(String\[\] args){

Set<String> set=new HashSet<>();

for(int i=1;i<=30;i++){

new Thread(()->{set.add(UUID.randomUUID().toString().substring(0,5)));

System.out.println(set);

},String.valueOf(i)).start();

}

}

}

会报并发修改错误。

解决方案:

Set<String> set=Collections.synchronizedSet(new HashSet<>());

Set<String> set=new CopyOnWriteArraySet<>();

hashSet底层?

hashSet底层就是hashMap

public HashSet(){

map=new HashMap<>();

}

//add set本质就是map,key是无法重复的

public boolean add(E e){

return map.put(e,PRESENT)==null;

}

private static final Object PRESENT=new Object();//不变的值

Map不安全:

public class MapTest{

public static void main(String\[\] args){

Map<String,String> map=new HashMap<>();

}

}

加载因子0.75,初始化容量16

public class MapTest{

public static void main(String\[\] args){

Map<String,String> map=new HashMap<>();

for(int i=1;i<=30;i++){

new Thread(()->{ map.put(Thread.currentThread().getName(),UUID.randomUUID().toString());

System.out.println();

},String.valueOf(i)

).start();

}

}

}

会出现并发修改异常

解决方法:

Map<String,String>map=new ConcurrentHashMap<>();

相关推荐
计算机毕设定制辅导-无忧学长4 分钟前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台
非优秀程序员9 小时前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻10 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
沐晓时光10 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
文丑颜不良啊12 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang13 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪13 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息14 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼14 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff15 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈