java - 通过集合进行迭代期间出现 ConcurrentModificationException

标签 java stream spring-batch concurrentmodification

我正在 spring-batch 应用程序中迭代 ItemProcessor 中的列表,但收到此错误:

java.util.ConcurrentModificationException: null

当我将批处理配置设置为使用单线程时,它工作正常。我正在使用 SimpleAsyncTaskExecutor。 Customer 是一个实体,它有一个 CustomerAlias 列表。

private void fillCustomer(final Customer customer, final ExtractLine result){

CustomerAlias customerAlias = customer.getCustomerAlias().stream().filter(s -> s.getAliasType().isAster()).findFirst().orElse(nullAlias);
result.setCustomer(customerAlias.getCalNmeAliasName());
}


java.util.ConcurrentModificationException: null
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.hibernate.collection.internal.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:815)
at java.util.Spliterators$IteratorSpliterator.tryAdvance(Spliterators.java:1812)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
at com.liq.sub.impl.MyProcessor.fillCustomer(MyProcessor.java:107)

最佳答案

When I set my batch config to use a single thread it works fine.

那么答案非常简单:其他一些线程当前正在迭代该集合。

现在您需要退一步并确定在代码运行时集合可能在源代码中被修改的位置。

没有任何“魔法”可以帮助避免这种情况。

关于java - 通过集合进行迭代期间出现 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56662111/

相关文章:

java - 如何在 Gremlin 中查找图形模式?

java - 序列化不存储对象数据,只存储对象引用

actionscript-3 - AS3 mp4 保存文件

actionscript-3 - 如何从 ActionScript 3 中的缓冲区 (ByteArray/Stream) 播放 MP3 声音?

java - 如何使用Spring Batch实现步骤的分布式处理

jar - 运行 Spring 批处理时出现 CommandLineJobRunner 错误无法找到或加载主类 CommandLineJobRunner

java - log4j2无法删除旧文件

java - 在 Servlet 的 JSP 页面中显示 UTF-8 文本

python - 将 io.StringIO 转换为 io.BytesIO

java - 使用注释并行(拆分)配置 Spring Batch 步骤