簡體   English   中英

Java Spring Async 如何管理線程?

[英]How does Java Spring Async manage threads?

我想編寫一個考慮到非阻塞請求的 Spring Boot 應用程序。 一般來說,我的控制器方法是單行方法,它只是調用一個服務方法然后返回,如下所示:

@RestController
class myController {
    ...
    @GetMapping("/")
    public String getString(){
        return service.getString().get();
    }
}

假設我有一個 Service 實現,它看起來像這樣:

@Service
class myService{
    ...
    @Async
    public CompleteableFuture<String> getString(){
        return "Hello World!";
    }
}

(假設我在其他地方包含了@EnableAsync ,並假設控制器代碼被修改為通過提取 String 值並返回它來處理 CompleteableFutures )

當我的控制器調用我的服務時,Java 是否仍然保留一個工作線程來等待服務的返回值,還是工作線程返回到線程池直到服務完成其工作?

謝謝。

當我的控制器調用我的服務時,Java 是否仍然保留一個工作線程來等待來自服務的返回值

不,您的控制器不會等待, @Async方法被異步調用。

還是工作線程返回到線程池,直到服務完成其工作?

默認情況下,當@Async方法被調用時,Spring 使用SimpleAsyncTaskExecutor為每次調用啟動一個新線程,因此不使用線程池。 但是,您可以提供自己的 Task Executor 或使用ThreadPoolTaskExecutor - details

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM