【转】 Servlet多线程安全问题
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一,servlet容器如何同时处理多个请求 Servlet采用多线程来处理多个请求同时访问,Servelet容器维护了一个线程池来服务请求。该线程池实际上是等待执行代码的一组线程,我们把它叫做工作者线程(Worker Thread),Servlet容器使用一个调度线程来管理工作者线程(Dispatcher Thread)。 当容器收到一个访问Servlet的请求,调度者线程从线程池中选出一个工作者线程,将请求传递给该线程,然后由该线程来执行Servlet的service方法。当这个线程正在执行的时候,容器收到另外一个请求,调度者线程将从池中选出另外一个工作者线程来服务新的请求,容器并不关心这个请求是否访问的是同一个Servlet还是另外一个Servlet。当容器同时收到对同一Servlet的多个请求,那这个Servlet的service方法将在多线程中并发的执行。 二,Servlet容器默认采用单实例多线程的方式来处理请求 这种工作模式能减少产生Servlet实例的开销,提升了对请求的响应时间。对于Tomcat可以在server.xml中通过<Connector>元素设置线程池中线程的数目。 三,如何开发线程安全的Servlet 变量的线程安全 这里的变量指字段和共享数据(如表单参数值)。 将 参数变量 本地化