我是靠谱客的博主 冷静柚子,最近开发中收集的这篇文章主要介绍Java集合快速失败与安全失败Java集合快速失败与安全失败,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java集合快速失败与安全失败

前言

我们在开发过程中有没有在遍历集合的时候遇到过ConcurrentModificationException这样的异常,那么什么样的原因导致这种异常呢?本篇博客将带领大家去了解一下Java集合fail-fast快速失败机制与fail-safe安全失败机制。

正文

fail-fast与fail-safe

  • fail-fast快速失败机制: 是Java集合中的一种机制,在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出ConcurrentModificationException
  • fail-safe安全失败机制java.util.concurrent包下的容器都是安全失败,在遍历时不是直接在集合内容上访问的,而是先copy原有集合内容,在拷贝的集合上进行遍历,因此采用安全失败的容器可以在多线程下并发使用,并发修改。

fail-fast快速失败机制

public class test {
    public static void main(String[] args) {
        testForHashMap();
    }
    private static void testForHashMap() {
        HashMap<String,String> hashMap =new LinkedHashMap<>();
        hashMap.put("1","a");
        hashMap.put("2","b");
        hashMap.put("3","c");
        Iterator<Map.Entry<String,String>> iterator=hashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            hashMap.put("bloom","bloom");
            System.out.println(iterator.next());
        }
    }
}

快速失败机制下修改集合元素触发快速失败,输出结果:

  • 遍历集合时,新增或者删除元素,将抛ConcurrentModificationException异常
    在这里插入图片描述

fail-safe安全失败机制

public class test {   
    public static void main(String[] args) {
        testForHashTable();
    }

    private static void testForHashTable() {
        Hashtable<String,String> hashtable =new Hashtable();
        hashtable.put("4","d");
        hashtable.put("5","e");
        hashtable.put("6","f");
        Enumeration<String> iterator1=hashtable.elements();
        while (iterator1.hasMoreElements()) {
            hashtable.put("bloom","bloom");
            System.out.println(iterator1.nextElement());
        }
    }
}

安全失败机制下修改集合元素,输出结果

  • 我们可以在遍历集合的同时,新增、删除元素
    在这里插入图片描述

总结:

  1. fail-fast,它是Java集合的一种错误检测机制。
  2. 在用迭代器遍历一个集合对象时,如果遍历过程中不应该对集合对象的内容进行了修改(增加、删除、修改),可以新建一个新的集合进行操作。

在这里插入图片描述

最后

以上就是冷静柚子为你收集整理的Java集合快速失败与安全失败Java集合快速失败与安全失败的全部内容,希望文章能够帮你解决Java集合快速失败与安全失败Java集合快速失败与安全失败所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(82)

评论列表共有 0 条评论

立即
投稿
返回
顶部