大家都知道Servlet体系结构是建立在Java多线程机制之上的,也是其的优点。但是多线程就会造成不安全。
具体请看:http://www.yesky.com/334/1951334.shtml
其中也提到了三种解决方法:
 1、实现 SingleThreadModel 接口
  2、同步对共享数据的操作
  3、避免使用实例变量前两种会影响性能。一般不会采用。但是用最后一种,就是说不使用VO向业务层传递数据,直接使用参数的形
式,表单中的数据少的时候还可以,如果要是多的话是不是太不合适了?
大牛们是不是有更好的方法。

解决方案 »

  1.   

    唯一的解决方法:不要在 Servlet 中使用可变的成员变量!
      

  2.   

    因为Servlet是单实例的,之后,为每个用户请求创建新的线程.这意味着,如果新的请求到来,而前面的请求仍旧在执行,那么多个线程可能会并发访问同一个Servelt对象.
    在Servlet代码中,使用synchronized解决全局变量线程安全问题~
    public class MyServlet extends HttpServlet{
    private int count;
    public void doGet(){......addCount()...}
    private synchronized int addCount(){
    return count++;
    }
    }
    原则上,可以让Servlet实现SingleThreadModel接口,组织多线程访问,但是在java的api中SingleThreadModel是deprecated的.
    实现了SingleThreadModel,系统将所有的请求排队,一次只将一个请求转发给单个Servlet的实例.楼主的问题挺有意思的
    1、为什么要针对Servlet进行开发呢?
    2、java代码的性能影响对生产造成的影响有多大?你要在数据的准确性与性能上做取舍
    3、上面的文章本来就是针对开发过程中的总结。
      

  3.   

    唯一的解决方法:不要在 Servlet 中使用可变的成员变量!
      

  4.   

    不要在servlet中使用可变的成员变量