首页 > 编程语言 >Java中fail-fast与fail-safe机制

Java中fail-fast与fail-safe机制

时间:2022-10-12 18:00:48浏览次数:38  
标签:map Java iterator safe list fast add fail

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
*/

 

标签:map,Java,iterator,safe,list,fast,add,fail
From: https://www.cnblogs.com/Joshua-BlueSky/p/16785154.html

相关文章

  • Java数组05(数组相关应用)
    Arrays类:数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了Arrays供我们使用,从而可以对数据对象进行一些基本操作可以查......
  • java.class.path详解
    java中System.properties的一个属性“java.class.path”(系统类加载器加载字节码class的路径)的获取及详解:获取packagecom.yoyo.yotils.yoyo.system;importorg.apach......
  • java基础语法[01]
    一、注释注释不会被执行,是给写代码的人看的。是非常重要非常好的习惯。单行注释://多行注释:/**/文档注释:javadoc,/***/有兴趣可以搜:有趣的代码注释。......
  • java 将字符串转成json和字符串转成json属组的方法
      开发中经常遇到将字符串转成json和字符串转成json属组的方法,网上搜到的方法,好多都是不好用的,今天这里记录一下方便自己今后查看,也提供给需要的人。依赖:<!--处......
  • 安卓逆向 JNI实先java与C互通
    先来一张吊图jdk_1.6.0_43/include/jni.h 这个头文件的地址头文件分布  我们需要熟悉的 反射获取java中的类1.jclass/类型(JNICALL*FindClass)函数......
  • 谁说 JavaScript 简单的?
    英文|AurélienHervé 译文| ​zcfy.cc/article/who-said-java-was-easy-hacker-noon-3026.html这里有一些Javascript初学者应该知道的技巧和陷阱。如果你已经是专家......
  • JavaScript闭包的深入理解
    闭包算是javascript中一个比较难理解的概念,想要深入理解闭包的原理,首先需要搞清楚其他几个概念:一、栈内存和堆内存学过C/C++的同学可能知道,计算机系统将内存分为栈和堆两部......
  • JAVA
    JAVA开发编写代码、编译代码、运行代码结论:只要装了JDK就拥有了JAVA程序开发和运行的全部环境在企业的部署环境下(上线测试),只需要安装JRE即可运行编译好的JA......
  • java 将yyyyMMddHHmmss转化为yyyy-MM-dd HH:mm:ss格式的字符串
    思路很简单:先转化为yyyyMMddHHmmss格式的Date类型,再格式化为yyyy-MM-ddHH:mm:ss格式的字符串类型importjava.text.DateFormat;importjava.text.SimpleDateFormat;im......
  • 如何通过Java应用程序创建Word表格
    表格,又称为表,既是一种可视化交流模式,又是一种组织整理数据的手段。人们在通讯交流、科学研究以及数据分析活动当中广泛采用着形形色色的表格。那么如何通过Java应用程序创建......