在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执行完毕后销毁了它们也就销毁了?】
一直以来很疑惑,水平较菜,求解答或者指引方向,勿喷