微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 WebLogic 中从 JPA 循环遍历列表时出现 ConcurrentModificationException

如何解决在 WebLogic 中从 JPA 循环遍历列表时出现 ConcurrentModificationException

当循环访问来自 WebLogic 中的 JPA 查询List 时,只要遍历此列表,应用程序就会抛出一个 ConcurrentModificationException

Caused By: java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
        at java.util.ArrayList$Itr.next(ArrayList.java:859)
(rest of stack trace omitted)

代码如下:

final List<SomeEntity> someEntities = someEntityDao.getAllMatchingSomeCriteria();
for (final SomeEntity someEntity : someEntities ) {
    // ...
}

请务必注意,列表 someEntities以任何方式、形状或形式被代码修改。相反,我得出的结论是,WebLogic 仍在一个单独的线程中填充列表,而主线程已经在遍历它。

可以这样解决

final List<SomeEntity> someEntities = new ArrayList<>(someEntityDao.getAllMatchingSomeCriteria());
for (final SomeEntity someEntity : someEntities ) {
    // ...
}

但这意味着必须完成所有代码,这是最后的手段。有没有办法让 WebLogic 停止尝试变得聪明?

解决方法

可能无法对同时发生变化的集合进行迭代,而不受迭代器的影响。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。