CompletableFuture 异步不需要返回值
时间: 2023-10-17 20:20:07 浏览: 239
虽然CompletableFuture可以用来执行异步任务并返回结果,但是它也可以用来执行异步任务但不返回结果。在这种情况下,我们可以使用CompletableFuture的thenRun()方法或thenAccept()方法来处理异步任务的执行结果。
例如,下面的代码演示了如何使用CompletableFuture执行一个简单的异步任务,但不返回任何结果:
```
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
// 执行异步任务,不返回结果
System.out.println("Async task executed.");
});
future.thenRun(() -> {
// 异步任务执行完成后,执行回调函数
System.out.println("Async task completed.");
});
```
在上面的代码中,我们使用CompletableFuture.runAsync方法来执行一个简单的异步任务,该任务不返回任何结果,只是在控制台上输出一条信息。然后,我们使用CompletableFuture的thenRun()方法来注册一个回调函数,在异步任务执行完成后执行该回调函数。在这个例子中,我们只是在控制台上输出一条信息"Async task completed.",表示异步任务已经完成。需要注意的是,这个回调函数并不会接收异步任务的计算结果,因为异步任务并没有返回任何结果。
除了thenRun()方法外,CompletableFuture还提供了thenAccept()方法,它可以用来处理异步任务的计算结果。与thenRun()方法不同的是,thenAccept()方法会接收异步任务的计算结果作为参数,并进行一些处理。例如,下面的代码演示了如何使用thenAccept()方法来处理异步任务的计算结果:
```
CompletableFuture.supplyAsync(() -> {
// 执行异步任务,并返回一个结果
return "Hello, world!";
}).thenAccept(result -> {
// 处理异步任务的结果
System.out.println("Async task completed with result: " + result);
});
```
在上面的代码中,我们使用CompletableFuture.supplyAsync()方法来执行一个异步任务,并返回一个字符串"Hello, world!"作为计算结果。然后,我们使用thenAccept()方法来处理异步任务的结果,将其输出到控制台上。需要注意的是,thenAccept()方法会接收异步任务的计算结果作为参数,并进行处理,因此我们可以在回调函数中对计算结果进行任何想要的操作。
阅读全文