java - Spring Boot Async方法如何使用ThreadPool处理请求

标签 java multithreading spring-boot asynchronous

我无法理解异步是如何工作的。我知道网络服务器有自己的线程池来处理多个请求。当我们使用 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/

相关文章:

Java 如何显示然后隐藏(GONE) View -Android

java - firebase databasereference 没有给出虚方法错误

spring-boot - 在 docker 中使用 vaadin 运行 Spring boot 应用程序时初始化 Tomcat 失败

java - 在 Spring 中创建实体实例,无需任何 Spring 交互

mysql - 如何为对象的特定变量添加管理员用户名和密码字段?

java - Spring 启动: Inject beans from tests into web environment

java - 我是否必须为 Cassandra 中的每次写入打开一个新的数据库连接?

python - 在 tkinter 中同时运行两个脚本

c++ - 使用异步调用与在线程中使用同步调用相同吗?

javascript - Angular CLI 中的网络 worker