您的位置:首页 > 编程语言 > Java开发

java.util.ConcurrentModificationException 并发修改异常处理

2017-09-07 17:47 615 查看
项目代码 
//先根据商户编码获取活动list
Example
example=
new Example(TPromoActivity.class);
example.createCriteria().andEqualTo("systemMercCode",systemMercCode)
.andNotEqualTo("activityStatus",ActivityStatus.CLOSURE.getCode());

4000
List<TPromoActivity>list=
tPromoActivityMapper.selectByExample(example);
if(!Strings.isNullOrEmpty(activityCode)){
//再根据当前活动编码获取叠加活动list2
TPromoActivityVOactivity=
selectActivityByCode(activityCode,systemMercCode);
List<TPromoActivityCompVO>list2=
tpromoActivityCompService.getList(activity.getId());
//存储叠加活动id
List<Long>activitys=
newArrayList<>(list2.size());
activitys.add(activity.getId());
list2.forEach(x->activitys.add(x.getAddedActivityId()));
//去重
for(Iterator<TPromoActivity>
iterator=
list.iterator();iterator.hasNext();){
TPromoActivityactivityTemp=
iterator.next();
if(activitys.contains(activityTemp.getId())){
iterator.remove();
}
}
}
ConcurrentModificationException
当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。主要原因是iterator.next()时会检查size
大小,如果改变就会抛出异常

附带几个解决方法  带几个解决方
方法一 迭代移除   iterator.remove();

方法二 对应索引移除

//      for (int i = 0; i < list.size(); i++){

//          Integer integer = list.get(i);

//          if (list2.contains(integer)){

//            list.remove(integer);

//            list.remove(i);

//        }

//      }
方法三 : 
list 集合 使用线程安全方式创建 CopyOnWriteArrayList 移除时 按平时操作移除对象
//    while (it.hasNext()) {  

//        String s = it.next();  

//         if (s.equals("string2")) {  

//             strList.remove(s);  

//        }  

//    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐