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<>();

相关推荐
阿里嘎多学长1 小时前
2026-09-29 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Bruce_Liuxiaowei1 小时前
网页版 DeepSeek “harness desktop“ WebGL 上下文创建失败排查实录
开发语言·javascript·webgl
狗凯之家源码网1 小时前
PHP 用户反馈系统源码深度评测与实战指南
开发语言·php·用户反馈系统
谢亮_vipxieliang2 小时前
Stream API 不是银弹:常见坑与性能建议
java·开发语言
迅猛龙办公室2 小时前
实现第一个python程序(HelloWorld)
开发语言·python
源码宝2 小时前
Web‑PACS 云影像源码|Java+Vue3 医院影像管理系统完整方案
java·源码·影像pacs·成品源码·医院影像系统
phltxy2 小时前
C 语言动态内存管理:从申请空间到安全释放
c语言·开发语言·ui
可乐鸡翅yeah_2 小时前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
ShineWinsu2 小时前
对于Redis:string类型的解析
java·c++·redis·分布式·缓存·面试·string