我有一段代码在循环中运行,我希望并行化。 ExecutorService的使用使得代码非常快,但是我得到了不一致的结果,可能是由于竞争条件。是否存在另一个并行for循环,它像这一个一样快速运行并始终保持一致?
ExecutorService exec = Executors.newFixedThreadPool(8);
try{
for (String tour : tours)
{
if (valid)
{
exec.submit(() ->
{
double len1 = tsp.tourLen(tour, cities); //expensive sequentially
if (bestLen == -1 || len1 < bestLen)
{
bestLen = len1;
bestTour = tour;
}
});
}
}
System.out.println("\n Best tour len: " + bestLen);
System.out.println("\n Best tour: " + bestTour);
} finally
{
exec.shutdown();
}
答案 0 :(得分:0)
我这样做的方法是在后台线程中进行繁重的处理,将其加载到HashMap<String, Double>
中,以避免并发问题。
(tour,len1)
然后使用foreach lambda hashmap.foreach((k,v) -> /*comparison here*/);
注意:强>
虽然我上面提到过同步,但是对于这个问题,我怀疑它会有所帮助,因为,你无法比较你还没有的数据。