【发布时间】:2013-09-19 16:33:09
【问题描述】:
我有一个具有getInstance() 方法的单例实用程序助手类,它懒惰地初始化并返回实例。我总是使用getInstance() 来获取实例。我之所以将它设为 Spring 组件,只是因为我需要访问我的实用程序类中的其他一些 Spring bean。
同时这个类默认是spring bean scoped singleton。
我应该只实现simple lazy initialization 还是应该将它与多线程应用程序的双重检查锁定一起使用?
或者 Spring bean 单例会在应用程序的整个生命周期内保证这个单一实例?
【问题讨论】:
-
不建议您使用 Enum 作为单例,这将保证单实例和线程安全。看看这个问题并接受答案stackoverflow.com/questions/10702693/…
-
您应该避免双重检查锁定,因为它不能保证总是按预期执行。 cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
标签: java multithreading spring