美文网首页
fail-fast 与 fail-safe 是什么?

fail-fast 与 fail-safe 是什么?

作者: Java元宇宙 | 来源:发表于2020-04-10 09:40 被阅读0次

    fail-fast 快速失败,是指在遍历集合时,检查遍历过程中集合的modCount是否改变,如果改变就会抛出java.util.ConcurrentModificationException异常。

    fail-safe 安全失败,是指在遍历集合时,先生成一份拷贝,然后遍历拷贝,也就不检查 modCount 了。

    java.util包下的普通容器,比如 ArrayList、HashMap 都采用 fail-fast;java.util.concurrent包下的并发容器,比如 ConcurrentHashMap 就采用 fail-safe。

    fail-fast 快速失败

    fail-fast 是集合中的快速失败机制,对集合进行遍历操作的时候,会检查操作之前的集合修改次数expectedModCount,与当前的集合修改次数 modCount 是否相同,如果不同就会报 java.util.ConcurrentModificationException 异常。

    如下面的代码所示,我在进行 forEach 循环的中间执行一个 add() 操作,list 被修改就会执行 modCount++,导致在遍历过程中 modCount != expectModCount,抛出java.util.ConcurrentModificationException 异常。

    List<String> list = new ArrayList<>();
    list.add("aaa");
    list.add("bbb");
    
    list.forEach(s -> {
        System.out.println(s);
        list.add("ccc");
    });
    
    fail-fast

    fail-safe 安全失败

    fail-safe 是指安全失败机制,对集合进行遍历操作的时候,它不是遍历集合本身,而是先拷贝一份集合,然后遍历这个集合。

    Map<String, String> map = new ConcurrentHashMap();
    map.put("a", "a1");
    map.put("b", "b1");
    
    map.forEach((k, v) -> {
        System.out.println(k + ": " + v);
        map.put("c", "c1");
    });
    
    fail-safe

    相关文章

      网友评论

          本文标题:fail-fast 与 fail-safe 是什么?

          本文链接:https://www.haomeiwen.com/subject/xvmqmhtx.html