java web多线程

在java web方面,一直以来有一个困惑,用tomcat作为应用服务器。最开始接触学习的是直接jsp中嵌入可执行的java代码执行请求。然后有后端单独的servlet,可以做到jsp和后台代码分离编写。还有一些框架ssh、spring mvc,spring boot等。目前是vue + spring boot做到真正的前后端开发。

前端的http请求,经过nginx转发到后台,后台收到请求后,用一个线程去执行此请求。对于spring boot,是默认有一个线程池,线程数量大小是200个。这是一个有线程池的地方。

在spring中,bean都是默认单例的,那么假设连接的是mysql,也有阿里的一套druid可以是处理sql请求的线程池。

比如这时候,在代码内部用线程池ThreadPoolExecutor,这个配置的线程池用@Bean(value = "ThreadPool")方式作为bean。

那么,从后端收到前端的请求之后,请求进来就耗费了tomcat默认线程池中200个线程中的一个线程,假设是线程A,这个线程后续的执行,又都是怎么样的过程呢?

这个线程执行的代码依然是后端的一套代码,共用的同一个单例bean,遇到这种线程池的配置如自定义的@Bean(value = "ThreadPool")业务线程池,还有数据库mysql的druid线程池。这两个线程池,是在线程A里面的线程么?【大概意思就是依附于线程A存在,当A执行完毕后销毁了它们也就销毁了?】

一直以来很疑惑,水平较菜,求解答或者指引方向,勿喷

阅读 3.8k
1 个回答
新手上路,请多包涵

我给你举个吃饭的例子。
中午小强到山西刀削面吃刀削面

  1. 服务员10块钱,要了一碗刀削面
  2. 服务员给厨师说做个刀削面
  3. 厨师发现没面了,给采购员说你买点面。
  4. 采购员买好面给厨师
  5. 厨师三下五除二做好面给服务员
  6. 服务员端给小强吃。

这里

  1. 前端就是小强
  2. 需要的数据就是刀削面
  3. 服务员是tamcat (线程池)
  4. 厨师是业务(线程池)
  5. 采购员是druid(线程池)

在这个业务流程中,真正销毁的是刀削面,服务员,厨师,采购员都是存在而且数量不变。当小强需要吃饭时, 饭店(tomcat)派出一个服务员伺候我。当刀削面上到我跟前时,他就回去了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进