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执行完毕后销毁了它们也就销毁了?】
一直以来很疑惑,水平较菜,求解答或者指引方向,勿喷
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我给你举个吃饭的例子。
中午小强到山西刀削面吃刀削面
这里
在这个业务流程中,真正销毁的是刀削面,服务员,厨师,采购员都是存在而且数量不变。当小强需要吃饭时, 饭店(tomcat)派出一个服务员伺候我。当刀削面上到我跟前时,他就回去了。