异步执行任务
通过CompletableFuture提供的进一步封装,很容易实现Future模式的异步调用。
例子,异步计算100的3次方。
CompletableFuture.supplyAsync()方法构造一个CompletableFuture实例,在supplyAsync()方法中,会在一个新的线程中执行传入的参数。supplyAsync()会立即返回,返回的CompletableFuture对象实例就可以作为这次调用的契约,在将来任何场合用户获取最终结果。
private void test() {
final CompletableFuture<Integer> future =
CompletableFuture.supplyAsync(()->calculate(100));
try {
//如果当前计算为完成,调用get()的线程就会等待
System.out.println(future.get());
}catch (Exception e) {
e.printStackTrace();
}
System.out.println("exit");
}
private int calculate(int x) {
int res = 0;
try {
Thread.sleep(1000);
res = x * x * x;
}catch (InterruptedException ie) {
ie.printStackTrace();
}
return res;
}
输出结果:
用CompletableFuture异步计算随机生成100个1~100的随机数并求和。