Java 得到一个;稀有的;程序执行期间的ConcurrentModificationException

Java 得到一个;稀有的;程序执行期间的ConcurrentModificationException,java,xstream,optaplanner,concurrentmodification,Java,Xstream,Optaplanner,Concurrentmodification,我正在使用Optaplanner创建一个程序,我不断得到这个异常,但只有在极少数情况下,大多数时候我可以毫无问题地执行我的程序,而且很难重新创建问题,因为它只是偶尔发生 线程“main”java.util.ConcurrentModificationException中的异常:java.util.ConcurrentModificationException 位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newIn

我正在使用Optaplanner创建一个程序,我不断得到这个异常,但只有在极少数情况下,大多数时候我可以毫无问题地执行我的程序,而且很难重新创建问题,因为它只是偶尔发生

线程“main”java.util.ConcurrentModificationException中的异常:java.util.ConcurrentModificationException 位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) ... 位于org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:503) 位于org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:331) 位于org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:220) 位于org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:61) 在org.avalin.optaplanner.main.EmployeeRoster.buildEvaluationSolver上(EmployeeRoster.java:247) 位于org.avalin.optaplanner.main.EmployeeRoster.main(EmployeeRoster.java:82) 原因:java.util.ConcurrentModificationException 位于java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1138) ... 位于java.base/java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291) 位于java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:747) 位于java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:283) 位于java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1603)
在java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)中,通过调用
solverFactory.getSolverConfig()
(例如,动态配置终止时间限制),您可能正在从不同线程修改相同的
solverFactory
实例


解决方案:在文档中查找
SolverFactory.cloneSolverFactory()

听起来像是线程之间缺少同步。