阅读量:0
在Spring Boot中,可以使用CompletableFuture
来实现多线程返回值的获取。CompletableFuture
是Java 8中引入的异步编程工具,用于处理异步操作的结果。
首先,你需要创建一个CompletableFuture
对象,并通过supplyAsync
方法指定要执行的异步操作。在supplyAsync
方法中,你可以使用Lambda
表达式来定义具体的异步任务。
例如,假设你想要执行一个耗时的操作并返回一个字符串结果,你可以这样写代码:
import java.util.concurrent.CompletableFuture; public class MyService { public CompletableFuture<String> doAsyncOperation() { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { // 耗时的操作 String result = "Hello World"; return result; }); return future; } }
然后,在调用该方法的地方,你可以使用CompletableFuture
的get
方法来获取异步操作的结果。get
方法是一个阻塞方法,会等待异步操作完成并返回结果。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @RestController public class MyController { @Autowired private MyService myService; @GetMapping("/async") public String asyncOperation() throws ExecutionException, InterruptedException { CompletableFuture<String> future = myService.doAsyncOperation(); String result = future.get(); return result; } }
在上面的示例中,asyncOperation
方法调用了doAsyncOperation
方法并获取了一个CompletableFuture
对象。然后,通过调用get
方法来获取异步操作的结果。
需要注意的是,get
方法可能会抛出InterruptedException
和ExecutionException
异常,需要进行相应的异常处理。
另外,你还可以使用CompletableFuture
提供的其他方法来处理异步操作的结果,比如thenApply
、thenAccept
和thenCompose
等,具体使用方法可以参考Java的官方文档。