news 2026/9/27 14:17:16

JUC之集合类不安全

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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<>();

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 13:57:30

常见CPU芯片选型与调优指南:架构、天梯图到故障排查

大家平时口里说的CPU&#xff0c;其实远不止是电脑主机里那块Intel或AMD的芯片。手机、平板、路由器、智能电视、服务器&#xff0c;甚至电梯控制板里都有CPU&#xff0c;只是形态和架构完全不一样。这几年“常见CPU芯片”这个话题之所以越来越热&#xff0c;是因为买电脑要看天…

作者头像 李华
网站建设 2026/9/27 13:47:28

一文读懂PCIe三层架构:事务层、数据链路层与物理层

做底层开发的人&#xff0c;十有八九都跟 PCIe 打过交道。这个协议从 2003 年一路走到现在&#xff0c;机械接口从插槽换到 M.2&#xff0c;速率从 2.5GT/s 跳到 32GT/s&#xff0c;但最核心的协议分层——事务层、数据链路层、物理层这套三层架构&#xff0c;却稳稳当当地用了…

作者头像 李华