由于默认情况下Servlet,在内存中只有一个实例对象,当多个浏览器并发访问Servlet时就有可能产生线程安全问题
解决方案:
1、加锁--效率降低 synchronized(this){ }
2、SingleThreadModel接口 -- 不能真的防止线程安全问题
在服务器的内部维护一个对象池,放servlet的对象,一个请求过来,会到池里检查一下有没有这个servlet,如果没有,创建一个给当前线程使用,使用完的就放回池里。如果第一个线程使用的servlet对象还没有还回池里,第二线程过来就会再创建一个servlet对象,两个servlet对象会随机被选中给第三个线程使用。
3、最终解决方案:
在Servlet中尽量少用类变量,如果一定要用类变量则用锁来防止线程安全问题,但是要注意锁住内容应该是造成线程安全问题的核心代码,尽量的少锁主内容,减少等待时间提高servlet的响应速度。