servlet容器“通常”创建一个servlet实例和同一个实例的不同线程,以服务多个请求。(我知道可以使用不推荐的SingleThreadModel和其他特性来改变这一点,但这是通常的方法)。
我想,这背后的简单原因是性能提高,因为创建线程比创建实例要好。但这似乎不是原因。另一方面,创建实例几乎没有开发人员不必担心线程安全的优势。
我正试图理解这一决定的原因,在线程安全的权衡上。
发布于 2012-06-28 15:17:29
请注意,SingleThreadModel并不能解决所有线程安全问题。例如,会话属性和静态变量仍然可以由多个线程上的多个请求同时访问,即使在使用SingleThreadModel servlet时也是如此。建议开发人员采取其他方法解决这些问题,而不是实现该接口,例如避免使用实例变量或同步访问这些资源的代码块。
更多信息请参考this thread。
发布于 2012-06-28 15:08:45
这是关于表演的。如果没有状态,就没有锁定和争用。Servlet是基本的构建块,在这个级别上构建关于状态的假设不是一个好主意。
servlet只是一种说法,容器收到了这个请求,这是应用程序对它做一些事情的一个机会。任何关于需要什么样的状态的假设都可能对某些应用程序有利,而对其他应用程序可能不利,因此servlet会对此进行讨论。如果有一个通用的设计原则在工作,它是保持一些足够简单,以使一般有用。
https://stackoverflow.com/questions/11247459
复制相似问题