在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的官方文档。