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
  • 相关阅读:
    VS.NET 2005 常用的快捷键
    路径,文件,目录,I/O常见操作汇总
    c#中cookies的存取操作
    ASP.NET AJAX入门系列(1):概述
    RS2008中控件ID冲突问题
    [书名]各种计算机语言的经典书籍
    终于把课件做好了~~
    还是两个数的交换问题
    自制简易图片尺寸调整工具[源]
    被点名了~~~[游戏]
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14781592.html
Copyright © 2011-2022 走看看