线程安全的概念范畴:
线程安全,指的是在多线程环境下,一个类在执行某个方法时,对类的内部实例变量的访问是安全的。如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
线程安全问题都是由全局变量及静态变量引起的。对于下面的两种变量,不存在任何线程安全的说法:(1)方法签名中的任何参数变量(2)处于方法内部的局部变量。因为这两种变量都处于方法体的内部,由当前的执行线程独自管理。在传统的web开发中,处理http请求的最常用方式是通过实现Servlet对象来进行http请求的相应,servlet是J2EE的重要标准之一,规定了Java如何相应http请求的规范,通过HttpServletRequest和HttpServletResponse对象,我们能够轻松地与Web容器交互。
当web容器收到一个http请求时,Web容器中的一个主调度线程会从事先定义好的线程池中分配一个当前工作线程,将请求分配给当前的工作线程,由该线程来执行对应的Servlet对象中的service方法,当这个工作线程正在执行的时候,Web容器收到另外一个请求,主调度线程会同样从线程池中选择另一个工作线程来服务新的请求。Web容器本身并不关心这个新的请求是否访问的是同一个Servlet实例。即:对于同一个Servlet对象的多个请求,Servlet的service方法将在一个多线程的环境中并发执行。所以,Web容器默认采用单实例(单Servlet实例)多线程的方式来处理http请求。
这种处理方式可以减少新建Servlet实例的开销,从而缩短了对http请求的响应时间。但是,这样的处理方式会导致变量访问的线程安全问题,也就是说,Ser