为什么双重检查锁定中使用易失性

2023-12-02

From 头先设计模式手册中,具有双重检查锁定的单例模式已实现如下:

public class Singleton {
    private volatile static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

我不明白为什么volatile正在使用中。没有volatile用法违背了使用双重检查锁定的目的,即性能?


理解原因的好资源volatile所需要的来自于JCIP书。维基百科有一个体面的解释也是该材料的。

真正的问题是Thread A可以分配一个内存空间instance在施工完成之前instance. Thread B将看到该作业并尝试使用它。这导致Thread B失败,因为它使用的是部分构建的版本instance.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么双重检查锁定中使用易失性 的相关文章

  • Java 使用服务器证书对 jar 进行签名

    是否可以使用服务器证书来签署 java web start 应用程序 我想知道的是它是否有效 我的服务器有一个受信任的证书 并且我想重复使用同一证书来签署应用程序 现在 我有这样的警告 此 jar 包含其签名者证书的 ExtendedKey
  • 在java中将RFC3339 DateTime转换为Date [重复]

    这个问题在这里已经有答案了 如何转换RFC 3339 https www rfc editor org rfc rfc3339java 中的 com google api client util DateTime 到 DateTime 例如
  • java本地时间格式不带年份

    我喜欢将本地时间格式格式化为不带年份的字符串 目前我可以显示包含年份的本地格式 java text DateFormat df java text DateFormat getDateInstance java text DateForma
  • 如何调试使用maven构建的android应用程序

    我目前正在尝试从 Eclipse 调试我的设备上的 Android 应用程序 设备已添加 我可以在控制台和 Eclipse 中看到它 控制台 Windows adb devices List of devices attached 0019
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • 为什么 hibernate 在一张表中保存两个 @OneToMany 列表?

    想象一下使用 Hibernate 和 JPA 的简化代码如下 Entity class C Id GeneratedValue public long id MappedSuperclass abstract class A Id Gene
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • 如何让 HttpClient 返回状态码和响应正文?

    我试图让 Apache HttpClient 触发 HTTP 请求 然后显示 HTTP 响应代码 200 404 500 等 以及 HTTP 响应正文 文本字符串 重要的是要注意我正在使用v4 2 2因为大多数 HttpClient 示例都
  • FXML 文件中的 getHostServices().showDocument()

    有没有简单的方法可以将 getHostServices showDocument 命令放入 toHomepage 方法中 而不是执行一行又一行的代码 这样代码应该看起来干净简单 package sample import javafx ap
  • 如何知道 glassfish 是什么 - 完整平台或网络配置文件?

    我已经安装了glassfish 我可以跑 asadmin version 它显示了它是什么版本 但如何知道它是 完整平台 还是 Web 配置文件 你可以使用 glassfish4 bin gt asadmin list containers
  • 整数与 int 比较

    我是新来的java 我现在正在学习非原始整数类型java 我知道以下比较无效并引发编译错误 String str c Char chr c if str chr return true 上面的代码片段给了我 Test java lineNu
  • Android 反向地理编码不适用于华为设备

    我正在尝试通过这段代码反转地理编码纬度 经度 Geocoder geocoder new Geocoder context Locale ENGLISH try List
  • 将 XML 从网站解析到 Android 设备

    我正在启动一个 Android 应用程序 它将解析来自网络的 XML 我创建了一些 Android 应用程序 但它们从未涉及解析 XML 我想知道是否有人对最佳方法有任何建议 这是一个例子 try URL url new URL your
  • Wildfly 10.1 消耗所有核心

    我们最近将银行应用程序从 java 1 6 升级到 1 8 将 jboss 4 x 升级到 wildfly 10 1 我们观察到 java 消耗了机器上可用的所有核心 10 有人可以告诉是什么原因吗 通常情况下 jboss 4 x 的最大
  • 当通过 Map.put(K, V) 添加值时,是否必须通过 Map.get(K) 返回相同的实例?

    假设您有以下代码 Map
  • 使用 InputStream 通过 TCP 套接字接收多个图像

    每次我从相机捕获图像时 我试图将多个图像自动从我的 Android 手机一张一张地发送到服务器 PC 问题是read 函数仅在第一次时阻塞 因此 从技术上讲 只有一张图像被接收并完美显示 但在那之后当is read 回报 1 该功能不阻塞
  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • 删除Java中重载的方法

    有2个重载方法 这些方法中的每一个都将一种类型的列表转换为不同类型的列表 但第一种方法使用比较器 class SomeClass public static
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • 在java中打印阿拉伯字符串

    我试图在 java 中显示阿拉伯语文本 但它显示垃圾字符 示例 或有时在我打印时仅显示问号 我如何才能打印阿拉伯语 我听说它与unicode和UTF 8有关 这是我第一次使用语言 所以不知道 我正在使用 Eclipse Indigo IDE

随机推荐

  • 如何将 JSON 字符串转换为 BSONDocument

    我有以下使用reactivemongo 驱动程序的函数 并且实际上可以很好地写入数据库 def writeDocument val document BSONDocument firstName gt Stephane lastName g
  • 如何更新 Tkinter 标签?

    我有一个简单的 tkinter GUI 其中有一个显示数字和按钮的标签 我将其设置为变量 x 当按下按钮时 x 的值增加 1 但是 当我点击按钮时 标签不会更新 我该怎么做呢 from tkinter import x 1 def add
  • Windows 7 图标大小问题

    我正在尝试创建一个应用程序图标 我拿了一堆创建的 ico 文件 每个大小一个 并将它们组合成一个 ico 文件 我可以看到他们都很好 我有 16x16 32x32 48x48 64x64 和 128x128 图标 全部 32 位 带透明度
  • SwiftUI - NavigationLink 不适用于按钮

    我正在制作一个应用程序 在其中输入两个数字 并希望在单击按钮时在第二个屏幕中显示数字的相加结果 我可以在控制台中打印结果 但不幸的是 按钮周围的导航链接似乎不起作用 如果我将 NavigationLink 放在按钮标签周围而不是整个按钮周围
  • 如何从 Node.js 以编程方式运行“yarn tag”?

    我想从node js 以编程方式运行yarn 命令 但找不到任何sdk 或cli 实用程序 唯一的事情就是产生一个新的进程 但这很麻烦 截至 2019 年 1 月 Yarn 尚无可直接调用的 API 你cannot需要 Yarn 并使用类似
  • 在 wxPython 中绘图的最佳画布?

    我必须绘制组成物理网络拓扑模型的元素图 会有节点和拱门 后者可以是单向的或双向的 我想捕获节点和拱门的单击事件 以选择元素并在某处显示其属性 以及节点 以移动它们 和拱门 以连接或断开元素 的拖动事件 我做了一些研究 并将替代方案缩小到OG
  • 创建 Visual Studio 扩展时如何获取“源代码管理历史记录”窗口中的选定项目?

    我开发了一个Visual Studio 扩展 我将一个按钮附加到源代码管理历史记录窗口的上下文菜单 菜单上有 变更集详细信息 比较 等 我需要得到选定的历史项目从窗户看 但不知道该怎么做 Update 我使用 Team Foundation
  • 无法从客户端设备通过 C# 表单应用程序访问我的 SQL Server

    我有一个 C 应用程序连接到我的计算机上的在线服务器 当我在 Visual Studio 中测试我的应用程序时 它工作正常 但是当我将应用程序提供给客户端时 它无法工作 我在代码中直接在单击按钮事件中使用此连接字符串 Data Source
  • _app.getInitialProps 不会在每个请求上调用

    我正在根据主机名设置主题 一切都在开发模式下运行 但我只是跑了npm run build我看到了getInitialProps在构建期间被调用 我找不到任何有关何时的信息 app s getInitialProps被叫 我构建了整个应用程序
  • Git 分支名称 - 区分大小写还是不区分大小写?

    我是一个新的 git 用户 最近需要照顾一个过时的 git 存储库 这是原始状态 由 git show branch 输出 cr232 CR 232 Release dev Style Changes dev Style Changes d
  • 将 ListBox.SelectedObjectCollection 转换为 ListBox.ObjectCollection?

    是否可以将 ListBox SelectedObjectCollection 转换为 C 中的 ListBox ObjectCollection 如果是这样 我该怎么办 我有一个接受的函数List
  • robots.txt 中没有索引

    我总是阻止谷歌使用 robots txt 文件为我的网站建立索引 最近我读到了谷歌员工的一篇文章 他说你应该使用元标签来做到这一点 这是否意味着 Robots txt 不起作用 由于我正在使用 CMS 我的选择非常有限 并且仅使用 robo
  • 在 C# 中操作 Word 2007 文档 XML

    我正在尝试用 C 操作 Word 2007 文档的 XML 我已经设法找到并操作我想要的节点 但现在我似乎不知道如何将其保存回来 这是我正在尝试的 Open the document from memoryStream Package pk
  • 为什么我必须在自执行匿名函数之前添加分号? [复制]

    这个问题在这里已经有答案了 大多数情况下 Javascript 允许我们在语句末尾省略分号 然而 有趣的是 在这种情况下并非如此 var x 5 asdf function window alert Yay 除非我们在 anon 函数之前的
  • iOS 8 - 无法安装企业应用程序

    我们公司有一个应用程序 可以使用 Enterprise Distribution 通过网站下载 在 iOS 8 Beta 5 中 点击下载链接会弹出预期的弹出窗口 网站 想要安装 应用程序名称 在该对话框上点击 安装 首先会导致应用程序陷入
  • 如何将 Android 上的 SQLite 数据库备份/恢复到 Dropbox

    我目前正在开发一个使用 SQLite 数据库的 Android 应用程序 我正在寻找如何在 Dropbox 等外部服务之间备份 恢复数据库的想法 我已经进行了一些解释 如下所示 Android备份 恢复 如何备份内部数据库 在android
  • 该方法必须返回 int 类型

    public int computeStyle String season if season equals summer if this style equals toque return 8 if this style equals s
  • 将目录附加到 Windows 中的 PATH 环境变量

    所以 我有这个批处理文件 据说它将我的脚本附加到路径变量中 echo OFF setx path path cd script py 但我遇到了一些问题 附加我的 script py 将导致路径大于 1024 个字符 从而输出警告 警告 保
  • 如何在 dagger 2.10 中创建自定义作用域模块

    我正在尝试将公司应用程序迁移到 dagger 2 10 和AndroidInjector inject方法 但我想我发现了一个问题 该应用程序使用自定义作用域 就像登录功能一样 它有 3 个活动 每个活动都有自己的 dagger 模块 和一
  • 为什么双重检查锁定中使用易失性

    From 头先设计模式手册中 具有双重检查锁定的单例模式已实现如下 public class Singleton private volatile static Singleton instance private Singleton pu