Servlets作为Singleton的设计原则是什么?

时间:2012-06-28 15:01:36

标签: java multithreading servlets singleton design-principles

  

可能重复:
  Why is (javax.servlet.)SingleThreadModel deprecated?

servlet容器“通常”创建一个servlet实例和同一实例的不同线程来提供多个请求。 (我知道这可以使用已弃用的SingleThreadModel和其他功能进行更改,但这是常用方法。)

我认为,这背后的简单原因是性能提升,因为创建线程比创建实例更好。但似乎这不是原因。 另一方面,创建实例几乎没有优势,开发人员永远不必担心线程安全。

我试图理解这个决定线程安全权的决定的原因。

2 个答案:

答案 0 :(得分:3)

关于表现。如果没有状态则没有锁定且没有争用。 Servlet是基本构建块,在关于状态的假设下构建在该级别上并不是一个好主意。

servlet只是一种说法,容器收到了这个请求,这里应用程序有机会对它做一些事情。关于需要什么样的状态的任何假设可能对某些应用程序有好处,对其他应用程序有害,因此servlet就这样做了。如果在工作中存在一般设计原则,那就是保持足够简单的通用性。

答案 1 :(得分:1)

  

请注意,SingleThreadModel不能解决所有线程安全问题。   例如,会话属性和静态变量仍然可以   多个线程同时访问多个请求,   即使使用SingleThreadModel servlet。建议这样做   开发人员采取其他方式来解决这些问题,而不是   实现此接口,例如避免使用实例   变量或同步访问那些的代码块   资源。

有关详细信息,请参阅this thread