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
*/
复制代码

 

posted @   Joshua_BlueSky  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示