在java中:
r1=complexCalc1();
r2=complexCalc2();
r3=complexCalc3();
r4=complexCalc4();
r5=complexCalc5();
return r1+r2+r3+r4+r5;
假设运行时间如
complexCalc1() -> 5 mins
complexCalc2() -> 3 mins
complexCalc3() -> 2 mins
complexCalc4() -> 4 mins
complexCalc5() -> 9 mins
如果这个程序按顺序运行,则需要23个 计算r1 + r2 + r3 + r4 + r5的分钟数。如果每个功能并行运行,即每个功能 complexCalc()函数在单独的线程中,对于r1 + r2 + r3 + r4 + r5计算,总时间为9分钟。
我的问题是如何实现它..我尝试了几种方法,但我仍然 无法弄清楚任何具体的事情。
提前致谢。
答案 0 :(得分:2)
仅使用标准Java API的解决方案草案如下:
public class Main {
private static final Callable<Integer> createCalculationSimulator (final int result, final int minutesToWait) {
return new Callable<Integer> () {
@Override
public Integer call() throws Exception {
Thread.sleep(minutesToWait*60*1000L);
return result;
}
};
}
public static void main(String[] args) throws Exception {
final ExecutorService executorService = Executors.newFixedThreadPool (5);
final long startTime = System.currentTimeMillis();
final List<Future<Integer>> results = executorService.invokeAll(
Arrays.asList(
createCalculationSimulator(1, 5),
createCalculationSimulator(2, 3),
createCalculationSimulator(3, 2),
createCalculationSimulator(4, 4),
createCalculationSimulator(5, 9)));
int resultSum = 0;
for (final Future<Integer> result : results) {
resultSum += result.get();
}
final long endTime = System.currentTimeMillis();
System.out.println("The end result is " + resultSum + ". Time needed = " + (endTime - startTime)/1000 + " seconds.");
}
}
答案 1 :(得分:1)
如果您可以将任务划分为逻辑独立任务(我相信您可以如您所指示的那样),那么使用Java 5 +会非常容易。
注意强>