加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java并发修改异常

发布时间:2020-12-15 04:56:10 所属栏目:Java 来源:网络整理
导读:我编写了以下代码,导致并发修改异常.我该怎样预防呢?我们的想法是逃避Map的所有值,并使用新的param map重新构建对象(dO). try { MapString,String[] paramMap = dO.getParameterMap(); SetMap.EntryString,String[] entries = paramMap.entrySet(); Iterato
我编写了以下代码,导致并发修改异常.我该怎样预防呢?我们的想法是逃避Map的所有值,并使用新的param map重新构建对象(dO).

try {
        Map<String,String[]> paramMap = dO.getParameterMap();
        Set<Map.Entry<String,String[]>> entries = paramMap.entrySet();
        Iterator<Map.Entry<String,String[]>> it = entries.iterator();
        while (it.hasNext()) {
            Map.Entry<String,String[]> entry = it.next();
            String[] values = entry.getValue();
            List<String> valList = new ArrayList<String>();
            if (values != null) {
                for (String value : values) {
                    valList.add(escapeHTML(value));
                     }
                dO.removeParameter(entry.getKey());

//请注意,Parameter是一个hashMap所以,是否需要在插入之前先删除该条目,否则它将替换与key关联的新值.它在Java中如何工作?

dO.addParameter(entry.getKey(),valList.toArray(new String[valList.size()]));
               }
            }
        }

解决方法

抛出异常是因为您在迭代时添加/删除地图中的内容:

dO.removeParameter(entry.getKey());
dO.addParameter(entry.getKey(),valList.toArray(new String[valList.size()]

你应该使用iterator.remove()代替.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读