一个类如果是多线程的需要具备什么样的条件, 为什么说Servlet 是多线程呢,如果Servlet 实现了SingleThreadModel接口后,每次的请求都会生成一个Servlet 实列。如果每次请求都生成一个Servlet 实列,不是就不会出现变量共享了吗?为什么他们还说仍然是线程不安全的呢?还有一个问题就是ActionForm 是不是也只有一个实列呢?如果是的话,怎么解决变量共享的呢

解决方案 »

  1.   

    要么继承Thread,要么实现Runnable接口
      

  2.   

    要么继承Thread,要么实现Runnable接口
      

  3.   

    一个Web组件中的多个线程访问实例变量。一个Web容器一般为每个请求创建一个线程来处理。如果用户确认一个servlet实例每次只处理一个请求,servlet就能实现SingleThreadModel 接口。如果servlet实现了这个接口,用户就能确保servlet的服务方法中不可能有两个线程并发执行。Web容器可通过同步访问一个servlet的单独实例、或者通过维护一个Web组件池为每个实例调用一个新的请求来实现。这个接口并不能防止Web组件访问共享资源(如静态类变量、外部对象)导致的同步问题当资源可以并发访问时,使用资源也就可以用不一致的方式。为了防止这样的情况发生,用户必须使用在Java指导中的线程单元中描述的同步机制来控制访问。