Servlet的线程安全问题
当多个浏览器并发访问同一个Servlet
时
web服务器会为每一个客户端的访问请求创建一个线程,并在这个线程上调用Servlet
的service
方法
因此在 service
方法 访问了 同一个资源 时,就有可能引发线程安全问题。
注意 :
局部变量不会造成 线程安全发生(因每个线程操作的局部变量是独立的)
全局变量 ,当多个线程并发访问该变量时,就会存在线程安全问题了
常规解决办法 :
与一般的线程安全解决方法一致的是 ,采用加锁机制 ,使访问按序进行
加了`synchronized`后,并发访问 同一个**全局变量** 时就不存在线程安全问题了,
例:
synchronized (this)
但是在高访问量并发时 ,这种方法会使访问速度降低 ,影响浏览体验
实际解决办法
Sun公司是提供有解决方案的:让Servlet去实现一个SingleThreadModel
接口,如果某个Servlet实现了SingleThreadModel
接口,那么Serv