0
私は並列化したいループで動作するコードを持っています。 ExecutorServiceを使用するとコードが非常に高速になりますが、競合状態が原因で矛盾した結果が発生しています。このように速く動作し、常に一貫している別の並列forループがありますか?Parallel For Loop Javaには競合状態があります
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();
}
がどこかに 'exec.submit()'の呼び出しがあると想定されていませんか? –
なぜそれがコピーされなかったのか分かりません(ありがとう) –
は 'synchronized'を使って' bestLen'と 'bestTour'ですか? –