问题描述
|
注意:此问题与Gamma94中描述的Singleton类无关(确保仅实例化一个对象。)
我阅读了有关@Singleton属性的Guice文档:
Classes annotated @Singleton and @SessionScoped must be threadsafe.
即使我不打算从多个线程访问对象,也是这种情况吗?如果是这样,为什么?
解决方法
如果只能从单个线程访问对象,则即使它是Guice
@Singleton
,也不需要是线程安全的。 Guice内部没有执行任何可能导致非线程安全的单例中断的多线程...构造Injector
的过程全部在调用Guice.createInjector
的线程上完成,而任何动态预配置在调用provider.get()
的线程上完成。当然,一个单例只会创建一次,然后在每次需要时返回……创建时取决于它是否绑定为一个渴望的单例(总是在启动时创建)以及ѭ2是在ѭ6(仅在需要时创建)还是creat7ѭ(在启动时创建)中创建的。
通常,虽然可以同时从多个线程访问单例(尤其是在Web应用程序中),所以发出警告。尽管许多开发人员会理解那种情况下单例需要线程安全,但其他开发人员可能不需要,并且我认为警告他们是值得的。