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