【发布时间】:2017-01-16 20:25:22
【问题描述】:
我正在并行化一个相当复杂的程序以使其更快。为此,我大部分时间使用ExecutorService。到目前为止,它运行得很好,但后来我注意到,仅仅一行代码就可以让我的程序运行速度减半。这是exactScore.get() 的行。
我不知道为什么,但有时需要超过 0.1 秒才能获得 Future Object 的双精度值。
这是为什么?我该如何处理它运行得更快?有没有办法在多线程时直接写在Double[]?
谢谢
int processors = Runtime.getRuntime().availableProcessors();
ExecutorService service = Executors.newFixedThreadPool(processors);
// initialize output
Double[] presortedExScores = new Double[sortedHeuScores.length];
for(int i =0; i < sortedHeuScores.length; i++ ){
final int index = i;
final Collection<MolecularFormula> formulas_for_exact_method = multimap.get(sortedHeuScores[i]);
for (final MolecularFormula formula : formulas_for_exact_method){
Future<Double> exactScore = service.submit(new Callable<Double>() {
@Override
public Double call() throws Exception {
return getScore(computeTreeExactly(computeGraph(formula)));
}
});
presortedExScores[index] = exactScore.get();
}
}
【问题讨论】:
标签: java multithreading performance future executorservice