java - 真的需要单例类中的双重锁定吗?
问题描述
在设计 Singleton 类时,是否需要使用双重检查?为什么我不能if
在块中也放一个条件synchronize
?还是有什么破绽?
public static Singleton getInstance() {
synchronized(Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
return singleton;
}
解决方案
外部的检查synchronized
不是必需的,但是,只要您getInstance()
多次调用,它就会提高性能。使用synchronized
非常昂贵,但只是检查== null
非常便宜。通常,当您调用 时getInstance()
,已经构建了一个实例,因此如果您总是先检查,== null
您可以尽量减少使用的次数synchronized
。
推荐阅读
- php - 无法获得中间件授权工作
- android - 如何使用上一个和下一个按钮切换片段?
- java - 使用 IText 或 PDFBox 在 java 中的另一个 PDF 文件之间合并 PDF 文件
- c++ - 从在线服务器上的计算机上传文件
- java - 使用 post 方法后信息不会出现在其他页面中
- google-apps-script - 只修改主题并发送草稿
- python - 为什么在使用 tensorflow 对象检测 api 重新训练预训练模型时以这种方式标记训练数据会导致错误的对象检测?
- c++ - 如何为多态性覆盖运算符
- java - 在运行时向字段添加注释
- grafana - 如何在 php Web 应用程序中与 json 数据共享 Grafana 仪表板?