Servlet并不是单例,只是容器只实例化它一次,表现出来单例的效果而已。但需要注意的是,Servlet是web容器来控制实例化的,并不是你自己用你编写的代码来实例化,即使你自己编写代码实例化你的servlet,Web服务器也不会直接调用你的实例化的Servlet对象的。

解决方案 »

  1.   

    那么这多人访问一个网站,而servlet实例只有一个,请问在吗控制线程安全
      

  2.   

    所以 一般 servlet中 才 不写 字段的 所以 在 处理事务时才要加锁,所以  struts2才 比较爽
      

  3.   

    1、servlet是单例的,严格地说是一个ServletMapping对应一个单例实例(如果一个Servlet被映射了两个URL地址,会生成两个实例)。早期的CGI模式是原型式的,例如同时并发2000次请求一个Servlet,如果不是单例的,内存瞬间要创建2000个对象,同时为了线程安全还得阻塞对方线程,其性能非常之差。
    2、要维护Servlet线程安全有很多办法,通常是使用同步块(或方法)来保护共享数据,其次可以volatile、Lock一些锁机制,还可以使用ThreadLocal来打通安全通道,另外还有原子操作也是用来保护数据安全,有非常多的选择。以笔者编程经验来看,Servlet需要考虑数据安全的应用场景不到千分之一。