Java中fail-fast与fail-safe机制
fail-fast 快速失败
-
一个线程在读取集合种的数据时,另外一个线程在修改集合会导致fail-fast
-
ArrayList HashMap 具备此机制
Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1,"Joshua"); map.put(2,"sophia"); map.put(3,"Linda"); Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator(); while (iterator.hasNext()){ System.out.println(iterator.next().getValue());
//修改 map.put(5,"jjj"); } List<String> list = new ArrayList<String>(); list.add("kkk"); list.add("ddhh"); list.add("dddd"); list.add("hhh"); list.stream().forEach((l)->{ System.out.println(l);
//修改 list.add("lll"); });
fail-safe 安全失败
采用安全失败机制的集合,在遍历时,先复制原来的集合,遍历的是复制的集合,在修改时,并不会被迭代器检测到,保证了安全性
- 实现安全机制的集合:CopyOnWriteArrayList、CurrentHashMap
- 不会输出添加或修改的内容
- JUC下的包都是安全的可在多线程下使用
CopyOnWriteArrayList<Integer> list = new CopyOnWriteArrayList<>(); list.add(4455); list.add(55); list.add(77); list.add(77); list.stream().forEach((s)->{ System.out.println(s); list.add(144); }); /* 4455 55 77 77 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!