Guice:为什么@Singleton注释的类必须是不可变的/线程安全的?

问题描述

| 注意:此问题与Gamma94中描述的Singleton类无关(确保仅实例化一个对象。) 我阅读了有关@Singleton属性的Guice文档:
Classes annotated @Singleton and @SessionScoped must be threadsafe.
即使我不打算从多个线程访问对象,也是这种情况吗?如果是这样,为什么?     

解决方法

如果只能从单个线程访问对象,则即使它是Guice
@Singleton
,也不需要是线程安全的。 Guice内部没有执行任何可能导致非线程安全的单例中断的多线程...构造
Injector
的过程全部在调用
Guice.createInjector
的线程上完成,而任何动态预配置在调用
provider.get()
的线程上完成。当然,一个单例只会创建一次,然后在每次需要时返回……创建时取决于它是否绑定为一个渴望的单例(总是在启动时创建)以及ѭ2是在ѭ6(仅在需要时创建)还是creat7ѭ(在启动时创建)中创建的。 通常,虽然可以同时从多个线程访问单例(尤其是在Web应用程序中),所以发出警告。尽管许多开发人员会理解那种情况下单例需要线程安全,但其他开发人员可能不需要,并且我认为警告他们是值得的。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...