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);
// }
// }
//先根据商户编码获取活动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);
// }
// }
相关文章推荐
- Android并发修改异常:java.util.ConcurrentModificationException
- 深入分析集合并发修改异常(源码分析)java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException(并发修改错...
- java.util.ConcurrentModificationException ,遍历集合并同时修改集合,并发造成的异常解决办法
- java.util.ConcurrentModificationException:并发修改异常!
- 多线程报错 : Exception in thread "Thread-3" java.util.ConcurrentModificationException 并发修改异常
- java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
- java.util.ConcurrentModificationException的解决办法 大家应该都知道, 在java中, 在对一些集合迭代的过程中对集合进行一些修改的操作, 比如说add,re
- Java Iterator ListIterator 迭代器 以及 并发修改异常 ConcurrentModificationException
- Java集合之ConcurrentModificationException(并发修改异常)分析
- Java并发修改错误ConcurrentModificationException分析
- java.util.ConcurrentModificationException异常处理
- 在Map或者Collection的时候,不要用它们的API直接修改集合的内容(否则会出现 java.util.ConcurrentModificationException 异常)
- Java.util.ConcurrentModificationException的理解与修改
- 修改集合抛出java.util.ConcurrentModificationException
- java 并发操作list集合导致java.util.ConcurrentModificationException
- java 并发操作list集合导致java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException 解决办法(转)
- java.util.ConcurrentModificationException
- CAS (15) — CAS 线上环境 Ehcache Replication 的非稳定重现错误 java.util.ConcurrentModificationException