1、 一、通常我们会从以下几个方面着手解决Servlet线程安全问题:尽可能不创建成员变量,因为成员变量会被多个线程共享;可以同步对共享数据的操作;可以实现SingleThreadModel 接口。
2、 二、尽可能不创建成员变量,使用局部变量代替成员变量。因为多个线程同时访问的是同一个成员变量,会共享该实例变量,而在访问局羿约妫鳏部变量时,每个线程都会有自己的变量,不会共享。如下图:bankId为成员变量,当多个线程并发访问时,会出现线程安全问题;而bankName为局部变量,是线程安全的。所以我们解决bankId线程安全问题,可以把bankId设置为局部变量,如下图所示:
3、三、将共享全局变量使用synchronized关键字加锁来解决servlet线程安全问题。如下图所示:
4、四、实现ingleThreadModel 接口,如下图所示:
5、五、总结:在Servlet线程安全问题中,尽可能不创建成员变量。
6、六:补充:Servlet创建的时间点:Servlet会在两个时间点被创建,一是在第一次被请求时,会被创建;二是在tomcat启动时会被创建,默认是第一种,如果希望在tomcat启动时创建,则需要在web.xml中配置。