作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
注意:这个问题不是关于 Gamma94 中描述的单例类(确保只有一个对象被实例化。)
我读了Guice documentation关于@Singleton 属性:
Classes annotated @Singleton and @SessionScoped must be threadsafe.
即使我不打算从多个线程访问对象,情况也是如此吗?如果是,为什么?
最佳答案
如果一个对象只能从一个线程访问,它不需要是线程安全的,即使它是一个 Guice @Singleton
. Guice 不会在内部执行任何可能导致非线程安全单例中断的多线程...构建 Injector
的过程都是在调用Guice.createInjector
的线程上完成的并且任何动态供应都在调用 provider.get()
的线程上完成.当然,单例只会创建一次,然后在每次需要时返回...何时创建取决于它是否绑定(bind)为 eager 单例(总是在启动时创建)以及Injector
创建于 Stage.DEVELOPMENT
(仅在需要时创建)或 Stage.PRODUCTION
(在启动时创建)。
虽然单例可以同时从多个线程访问(特别是在 Web 应用程序中),但这是很常见的情况,因此会出现警告。虽然许多开发人员会理解单例在这种情况下需要线程安全,但其他人可能不会,我认为警告他们是值得的。
关于unit-testing - Guice:为什么@Singleton-annotated 类必须是不可变的/线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6129287/
我是一名优秀的程序员,十分优秀!