任务结束方法

get

获取任务执行结果,如果任务尚未完成则进行堵塞状态,如果任务正常完成则返回执行结果,如果异常完成或执行过程中引发异常,这时就会抛出( 运行时)异常。

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    System.out.println("执行异步任务");
    return "执行异步任务";
});
// 调用 join 方法进行等待,获取执行结果
String s = future.get();

join

获取任务执行结果,如果任务尚未完成则进行堵塞状态,如果任务正常完成则返回执行结果,如果异常完成或执行过程中引发异常,这时就会抛出( 未经检查)异常。

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    System.out.println("执行异步任务");
    return "执行异步任务";
});
// 调用 join 方法进行等待,获取执行结果
String s = future.join();

getNow

立即获取任务执行结果,如果任务没有完成则返回设定的默认值,如果任务正常完成则返回执行结果。

// 执行 CompletableFuture 任务
CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> {
    // 睡眠5毫秒
    sleep(5);
    return "示例-执行完成";
});

// 随机睡眠1~10毫秒
sleep(new Random().nextInt(10));

// 调用 getNow 方法获取执行结果,如果任务未执行完成则输出设置的默认值
String result = cf.getNow("默认值");
System.out.println(result);

cancel

取消任务,如果任务尚未执行结束,调用该方法成功取消任务时返回 true,否则返回 false。并且任务取消成功后,通过 get/join 方法获取结果时,会抛出 CancellationException 异常。

// 执行 CompletableFuture 任务
CompletableFuture<Void> cf = CompletableFuture.runAsync(() -> System.out.println("执行 CompletableFuture 任务"));
// 调用 cancel 方法取消任务
boolean result = cf.cancel(true);
System.out.println(result);

最后更新于

这有帮助吗?