因此,我正在考虑构建一个业余爱好项目,这是一种特殊的东西,只是为了复习我的编程/设计。
它基本上是一个多线程网络爬虫,更新相同的数据结构object->int。
因此为此使用数据库绝对是矫枉过正,我唯一能想到的就是用于包含我的数据结构的线程安全单例。 http://web.archive.org/web/20121106190537/http://www.ibm.com/developerworks/java/library/j-dcl/index.html
我应该研究其他方法吗?
最佳答案
双重检查锁定已被证明是不正确和有缺陷的(至少在 Java 中是这样)。搜索或查看 Wikipedia's entry出于确切的原因。
首要的是程序的正确性。如果您的代码不是线程安全的(在多线程环境中),那么它就坏了。在性能优化之前,正确性是第一位的。
为了正确,您必须同步整个 getInstance
方法
public static synchronized Singleton getInstance() {
if (instance==null) ...
}
或者静态初始化
private static final Singleton INSTANCE = new Singleton();
关于java - 正确使用同步单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/777849/