这篇文章展示了Java 8的CompletableFuture
在执行异步计算时如何与并行流进行比较。
我们将使用以下类对长时间运行的任务进行建模:
class MyTask {
private final int duration;
public MyTask(int duration) {
this.duration = duration;
}
public int calculate() {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(duration * 1000);
} catch (final InterruptedException e) {
throw new RuntimeException(e);
}
return duration;
}
}
让我们创建十个任务,每个任务持续1秒:
List<MyTask> tasks = IntStream.range(0, 10)
.mapToObj(i -> new MyTask(1))
.collect(toList());
我们如何有效地计算任务清单?
方法1:依次
您首先想到的是按顺序计算任务,如下所示:
public static void runSequentially(List<MyTask> tasks) {
lo