我无法理解异步是如何工作的。我知道网络服务器有自己的线程池来处理多个请求。当我们使用 Spring Boot 实现异步 Web 服务并使用 TaskExecutor 配置 "n" 个线程时,这是否意味着为每个线程创建 n 个线程应要求来吗?
为了澄清,服务器会将请求分配给其线程池中的线程。因此,当该线程开始执行并调用标有@Asynch的函数时,它可以为每个传入线程创建另一个“n”线程来处理异步工作。请告诉我我的理解是否正确。
如果我的理解是正确的,那么如何决定应该创建多少池大小?有人可以举个例子吗?
最佳答案
有两件事,一是一个 Tomcat 线程池,每个请求都从其中获取一个线程并正在处理(这是在 server.tomcat.max-threads 中配置的),另一个是用于运行 @Aync 的单独线程池任务。当您运行一个注释为异步的方法(实际上是任务)时,这将创建一个任务并在异步队列中等待。初始请求不会被阻止,如果您不等待异步完成,它将返回并继续完成他的工作。简单来说,用@Async注解一个方法会使其在单独的线程中执行,调用者不会等待完成。
关于java - Spring Boot Async方法如何使用ThreadPool处理请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61968072/