java - 正确使用同步单例?

标签 java multithreading singleton synchronized

因此,我正在考虑构建一个业余爱好项目,这是一种特殊的东西,只是为了复习我的编程/设计。

它基本上是一个多线程网络爬虫,更新相同的数据结构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/

相关文章:

java - Android 中的 VideoView 无法正确播放视频

c# - 如何抽象一个单例类?

java - java spring config是否能够解析自定义变量解析器中的变量?

java - 重构java中常见的静态方法

java - 在圆中找到切点

java - 等待并通知 Controller -工作人员同步

java - HTTP 状态 500 - org.hibernate.exception.SQLGrammarException : Cannot open connection

c - WaitForSingleObject 无限等待线程终止

C++线程问题

javascript - 我应该导出单例类以在 React 中使用吗?