tomcat 线程和 spring boot 中异步注释启动的线程有什么区别?

What are the differences between a tomcat thread and a thread started by the async annotation in spring boot?

我正在学习线程以及构建 Web 应用程序时线程的工作原理。

据我了解流程如下:

  1. 用户发送 Http 请求
  2. Tomcat 创建线程 运行 连接控制器。
  3. Spring boot 运行s 一个异步注释方法,运行s 代码在 spring boot app 创建的单独线程池上。
  4. 释放tomcat线程,直到异步方法完成以处理更多请求。

我的理解正确吗?

spring 引导是否会创建自己的线程池以在释放主 tomcat 线程时进行 运行 异步操作?

调用异步方法时,tomcat 线程不会“释放”或“释放”。它在异步方法调用之后继续执行下一条指令并继续进行(除非它对异步方法返回的未来执行调用 get 之类的操作,以便它阻塞直到未来完成)。两个线程同时执行。

确实 Spring 有自己独立的线程池用于异步方法。使用的执行器是可配置的,@Async 将执行器的名称作为参数,因此不同的方法可以根据需要使用不同的池。当然,Tomcat 有一个线程池。