completablefuture.supplyAsync获取返回值
时间: 2023-09-17 08:10:41 浏览: 353
CompletableFuture.supplyAsync可以用来创建异步任务并返回一个CompletableFuture对象。如果你想获取CompletableFuture的返回值,可以使用CompletableFuture.get()方法。这个方法会阻塞当前线程直到异步任务完成并且返回结果。如果异步任务没有完成,get方法会一直阻塞当前线程直到任务完成。如果异步任务抛出异常,get方法会抛出ExecutionException,你可以通过getCause()方法获取异常的原因。
相关问题
CompletableFuture.supplyAsync 没有返回值
CompletableFuture.supplyAsync方法是可以返回一个值的。具体来说,它返回一个CompletableFuture对象,该对象代表了一个异步执行的任务,并且该任务最终会返回一个结果。我们可以通过调用CompletableFuture的get()方法来获取该任务的计算结果。
例如,下面的代码演示了如何使用CompletableFuture.supplyAsync方法来执行一个简单的异步任务,并返回一个结果:
```
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 执行异步任务
return "Hello, world!";
});
String result = future.get(); // 获取异步任务的计算结果
System.out.println(result); // 输出结果:Hello, world!
```
在上面的代码中,我们使用CompletableFuture.supplyAsync方法来执行一个简单的异步任务,该任务返回一个字符串"Hello, world!"。然后,我们通过调用CompletableFuture的get()方法来获取该任务的计算结果,并将结果打印到控制台上。可以看到,该代码的输出结果为"Hello, world!",说明异步任务成功执行,并返回了一个结果。
怎么用CompletableFuture .supplyAsync
CompletableFuture.supplyAsync可以用于异步执行一个方法并返回一个结果。具体使用方法如下:
1. 定义一个有返回值的方法,例如:
```
public String doSomething() {
// 假装耗时操作
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello, World!";
}
```
2. 调用supplyAsync方法:
```
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> doSomething());
```
supplyAsync方法会在内部开启一个新的线程,异步地执行doSomething方法,并将结果封装成一个CompletableFuture对象返回。
3. 获取执行结果:
```
future.thenAccept(result -> System.out.println(result));
```
thenAccept方法会在异步任务完成后执行,接受任务的执行结果作为参数进行处理。
需要注意的是,CompletableFuture.supplyAsync方法默认使用ForkJoinPool.commonPool作为线程池,如果需要使用自定义的线程池,可以使用CompletableFuture.supplyAsync(Supplier<U> supplier, Executor executor)方法,并传入自定义的线程池。
阅读全文