我正在使用Guice,我有一个问题。有一个servlet是Singleton。 JVM中只有一个此类的实例,或者只有一个Session范围的实例?那么对这个类的并发访问呢?
答案 0 :(得分:0)
您的servlet资源的并发访问会有任何问题。 Servlet容器将很好地处理它,它将在eaach请求中生成新线程并传递该servlet引用并且将处理请求。
最好让你使用servlet单线程来确认单个内存空间的使用,因此容器将是轻量级的。在spring中可用相同的概念,默认情况下每个bean都是单例。
答案 1 :(得分:0)
我不确定Guice,但是根据规范,除了你的Servlet实现了邪恶的SingleThreadModel
之外,Container确保每个JVM中只有一个Servlet实例存在于DD 中。 。 Container将为每个request
生成一个新线程,并调用service()
方法。
此外,类和实例变量不是线程安全的。只有局部变量才是线程安全的。
答案 2 :(得分:0)
实际上Guice 需要 servlet才能成为单身人士:
注意:每个servlet(或过滤器)都必须是@Singleton。如果无法直接对类进行批注,则必须使用bind(..)。in(Singleton.class)将其绑定,并与filter()或servlet()规则分开。任何其他范围下的映射都是错误的。这是为了保持与Servlet规范的一致性。 Guice Servlet不支持已弃用的SingleThreadModel。
您有责任正确处理并发访问。