java web多线程

发布于 2022-09-12 02:05:02 字数 754 浏览 26 评论 0

在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执行完毕后销毁了它们也就销毁了?】

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苯莒 2022-09-19 02:05:02

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

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

这里

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文