Servlet线程的设计
一个客户端请求,服务器就会创建一个新的线程来处理。
Server端新建一个socket连接监控客户端请求,理论上一个新建一个线程来处理。
servlet分成三个生命周期,如下图所示。
]
阶段1:初始化阶段servlet调用init()方法。
- Servlet容器(例如tomcat)启动的时候会自动装在servlet。 实现只需要在web.xml里配置即可。
- 在servlet容器启动后,客户首次向servlet发送请求。
- servlet类文件被更新后,重新装载servlet,servlet创建一个servlet实例,并且调用init方法初始化。
阶段二:响应客户请求,客户首次向servlet发送请求。
阶段三:终止阶段。当服务器关闭的时候,调用destroy方法。
servlet线程安全分析:servlet是在容器里,以单例的形式存在,也会有线程安全的问题,但是servlet这个类设计的时候,就不存在共享变量,每个请求都有自己的request对象和response对象,不存在共享变量的问题,故servlet是线程安全的。
线程池如何合理的设置
关于线程池如何设置合理的思考。
首先,我们为什么要使用多线程?
因为单线程程序不能充分利用cpu的性能,多线程程序主要是通过压榨cpu性能,达到提高我们应用性能的目的。
- 估算一个服务器的大概的最大并发量。可以参考应用是cpu密集型,还是io密集型,以及内存大小,带宽大小等等。
- 通过压测来确定服务器能承受的最大负载量。
tomcat中线程池如何合理的设置
- tomcat里如何配置线程池
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
<Connector executor="tomcatThreadPool" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
-
参数说明
-
tomcat线程池加载源码
类变量都有默认