zoukankan      html  css  js  c++  java
  • java中线程安全的集合

    一、CopyOnWriteArrayList

    迭代的同时进行修改会发生ConcurrentModificationException异常,推荐使用CopyOnWriteArrayList

    List<RtuTagAct> rtuTagActList = entry.getValue();
    for (RtuTagAct rtuTagAct:rtuTagActList) {
         if (rtuTagAct.getTagKey().equals(pushKey)) {
             rtuTagActList.remove(rtuTagAct);
                    }
                }

    下面是修改后的实现

    List<RtuTagAct> rtuTagActList0 = entry.getValue();
    List<RtuTagAct> rtuTagActList = new CopyOnWriteArrayList<>(rtuTagActList0);
    for (RtuTagAct rtuTagAct:rtuTagActList) {
        if (rtuTagAct.getTagKey().equals(pushKey)) {
            rtuTagActList.remove(rtuTagAct);
                    }
                }

    二、ConcurrentHashMap

    并发时修改Map,推荐使用ConcurrentHashMap,不然可能发生不可预料的后果

    比如如下实现,算出的数据根本就是错误的

    Map<String, Double> result = new HashMap<>();
    atIdList.forEach(meterId -> {
                Double now = rtValueMap.get(meterId); 
                Double node = hiveRTValueMap.get(meterId);
                double todayValue = ArithUtils.sub(now, node);
                 result.put(meterId, todayValue);  
                }
            });

    采用如下修改后的代码,果然就没问题了

    Map<String, Double> result = new ConcurrentHashMap<>();
    atIdList.forEach(meterId -> {
                Double now = rtValueMap.get(meterId); 
                Double node = hiveRTValueMap.get(meterId);
                double todayValue = ArithUtils.sub(now, node);
                 result.put(meterId, todayValue);  
                }
            });

    三、 其他

    interfacenon-thread-safethread-safe
    List ArrayList CopyOnWriteArrayList
    Map HashMap ConcurrentHashMap
    Set HashSet / TreeSet CopyOnWriteArraySet
    Queue ArrayDeque / LinkedList ArrayBlockingQueue / LinkedBlockingQueue
    Deque ArrayDeque / LinkedList LinkedBlockingDeque
  • 相关阅读:
    tomcat常见错误及解决方案
    MySQL 5.6 for Windows 解压缩版配置安装
    win7 cmd 操作mysql数据库
    @Responsebody与@RequestBody
    ajax常用参数
    JSP和servlet有什么区别?
    面试 小总结
    cocoapods导入三方库头文件找不到问题
    git笔记
    iOS裁剪,缩放图片白边问题解决办法
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14781592.html
Copyright © 2011-2022 走看看