1.并行计算
public static void main(String[] args) throws ExecutionException, InterruptedException {
long l = System.currentTimeMillis();
CompletableFuture<Integer> integerCompletableFuture = CompletableFuture.completedFuture(1).thenApplyAsync(integer -> {
return test1();
}).thenCombineAsync(CompletableFuture.completedFuture(2).thenApplyAsync(integer -> {
return test1(); }), (s1, s2) -> {
return s1 + s2;
});
System.err.println(integerCompletableFuture.get());
System.err.println(System.currentTimeMillis() - l);
}
private static int test1() {
try {
Thread.sleep(2000);
return 1;
} catch (InterruptedException e) {
throw new RuntimeException();
}
}
最终运行了2055ms,async是异步,如果没有设置线程池则会用默认的ForkJoinPool执行,如果有操作事物,注意事物问题
以下代码虽然是Async 但是不是异步执行
public static void main(String[] args) throws ExecutionException, InterruptedException {
long l = System.currentTimeMillis();
CompletableFuture<Integer> integerCompletableFuture =
CompletableFuture.completedFuture(1).thenApplyAsync(s -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 3;
}).thenApplyAsync(integer -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 2 + integer;
});
System.err.println(integerCompletableFuture.get());
System.err.println(System.currentTimeMillis() - l);
}
最终运结果为5. 3s
2## 异常处理
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> integerCompletableFuture = CompletableFuture.completedFuture(1).thenApplyAsync(integer -> {
return integer / 0;
}).exceptionally(throwable -> {
return 1;
});
System.err.println(integerCompletableFuture.get());
}
最终会输出1 也就是执行了exceptionally区域