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


项目代码 

//先根据商户编码获取活动list

Example example= new Example(TPromoActivity.class);

example.createCriteria().andEqualTo("systemMercCode",systemMercCode)

.andNotEqualTo("activityStatus",ActivityStatus.CLOSURE.getCode());

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);  
//        }  
//    }  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值