`
sunxboy
  • 浏览: 2869234 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Double-Checked Locking using Volatile

阅读更多

JDK5 and later extends the semantics for volatile so that the system will not allow a write of a volatile to be reordered with respect to any previous read or write, and a read of a volatile cannot be reordered with respect to any following read or write. See this entry in Jeremy Manson's blog for more details.

With this change, the Double-Checked Locking idiom can be made to work by declaring the helper field to be volatile. Thisdoes not work under JDK4 and earlier.

 

//Works with acquire/release semantics for volatile
//Broken under current semantics for volatile
class Foo {
     private volatile Helper helper = null;
     public Helper getHelper() {
         if (helper == null) {
             synchronized(this) {
                 if (helper == null)
                     helper = new Helper();
             }
         }
         return helper;
     }
 }

 

 

 

分享到:
评论

相关推荐

    C++ and the Perils of Double-Checked Locking

    在介绍双检锁模式(Double-Checked Locking Pattern,DCLP)的C++实现中,Scott Meyers和Andrei Alexandrescu在其2004年的文章中指出,传统的单例模式实现并不具备线程安全性。单例模式是设计模式中经常被提及的一种...

    C++ and the Perils of Double Checked Locking.zip

    《C++ and the Perils of Double Checked Locking》是一篇探讨C++编程中双重检查锁定(Double-Checked Locking)模式潜在问题的文献。在多线程编程中,双重检查锁定是一种常见的优化策略,旨在减少对同步原语的依赖...

    c++ and Peris of Double Checked Locking

    标题:C++与双检查锁定(Double Checked Locking)的陷阱 描述:C++如何解决单例模式的线程安全问题 ### 关键知识点解析: #### 单例模式的线程安全挑战 单例模式是一种设计模式,确保一个类只有一个实例,并提供...

    深入剖析Java中的双检锁模式:实现、陷阱与最佳实践

    在Java并发编程中,双检锁(Double-Checked Locking)是一种用于减少同步开销的优化技术,尤其适用于懒加载(lazy initialization)的场景。本文将详细探讨双检锁的工作原理、潜在问题以及如何安全地实现它。 双检锁...

    AngularJS入门教程之ng-checked 指令详解

    本文将针对AngularJS中的ng-checked指令进行详细解析。 ng-checked指令是用于在AngularJS中动态控制复选框(checkbox)或单选按钮(radio)的选中状态。当你需要根据数据模型(model)中某个变量的真值(true)或假值(false...

    element-ui tree树形控件:default-checked-keys 设置空数组 默认还是选中状态问题

    在这个问题中,开发者遇到了一个关于`default-checked-keys`属性的问题,即当尝试将该属性设置为空数组时,树形控件的节点依然保持选中的状态,这与预期的行为不符。 `default-checked-keys`属性是Element UI Tree...

    深究AngularJS——ng-checked(回写:带真实案例代码)

    本文深入探讨了AngularJS框架中的ng-checked指令,通过真实案例代码的形式展示了如何使用ng-checked实现复选框的状态记忆与回写。ng-checked指令在AngularJS中用于获取和设置复选框(checkbox)的选中状态。它依赖于...

    ACE中的DoubleCheckedLocking模式

    北京火龙果软件工程技术中心意图无论什么时候当临界区中的代码仅仅需要加锁一次,同时当其获取锁的时候必须是线程安全的,可以用DoubleCheckedLocking模式来减少竞争和加锁载荷。动机1、标准的单例。开发正确的有效...

    Java多线程之延迟初始化1

    synchronized (DoubleCheckedLocking.class) { if (instance == null) { instance = new Instance(); } } } return instance; } } ``` 双重检查锁定的关键在于使用`volatile`关键字修饰`instance`变量。`...

    Java并行(3):可见性重访之锁、Volatile与原子变量1

    尽管如此,`volatile`在某些场景下,如单例模式的双重检查锁定(Double-Checked Locking)或者作为标志位时,可以有效提升性能,同时保证基本的可见性。 总结来说,Java中的锁和`volatile`关键字都是为了应对并发...

    C++CLI中实现singleton模式

    双重检测锁(Double-Checked Locking)实现的Singleton模式在多线程应用中有相当的价值。在ACE的实现中就大量使用ACE_Singleton模板类将普通类转换成具有Singleton行为的类。这种方式很好地消除了一些重复代码臭味,...

    ng-options和ng-checked在表单中的高级运用(推荐)

    在AngularJS中,ng-options和ng-checked是两个非常重要的指令,它们在构建动态表单时起着关键作用。本文将深入探讨这两个指令的高级用法,帮助开发者更好地理解和利用它们的功能。 首先,我们来看ng-options。ng-...

    Java面试.docx

    3. **双端检锁(Double-Checked Locking, DCL)机制**: - DCL是一种尝试提高单例模式效率的设计模式,但如果没有正确同步,可能存在指令重排问题,导致非线程安全。 - 使用volatile可以禁止指令重排,从而在一定...

    checked.css-超酷CSS3复选框和单选按钮点击动画库

    这里,`checked--effect-name`需要替换为23种动画效果中的一个,如`checked--pulse`或`checked--rotate`。 3. **自定义样式**:除了预设的动画效果,你还可以通过CSS对复选框和单选按钮的样式进行个性化调整,以...

    6vc中volatile关键字的应用共4页.pdf.zip

    在某些情况下,如双重检查锁定模式(double-checked locking pattern),即使使用了`volatile`,也可能会因为指令重排序而导致错误。因此,为了确保内存模型的正确性,还需要配合`std::atomic`或C++11的内存顺序模型...

    设计模式解析-英文

    各种工厂模式 242 第21章 Singleton模式和Double-Checked Locking模式 249 第22章 Object Pool模式 257 第23章 Factory Method模式 267 第24章 工厂模式的总结 272 第八部分 终点与起点 第25章 设计模式回顾:总结与...

    poly-checked:神奇

    多检查奇迹:checked伪类 polyfill(适用于 IE8 及以下)。如何使用包括 jQuery 1.x(与旧 IE 兼容)>= 1.7,然后在 IE 条件注释中包含 poly-checked 脚本: < script src =" //ajax.googleapis....

    H5 jQuery多级复选框checkbox选中代码.zip

    代码片段:  function isAllChecked(){ ... allChecked = $(this).find(":checked").not("[name='all-checked']") ,  thisAllCheckBtn = $(this).find(".all-checked [name='all-checked']");

    单例模式简介和java代码实现

    }}在双重检查锁(Double-Checked Locking)实现中,第一次检查是在不加锁的情况下进行的,只有当第一次检查后 instance 仍然为 null 时,才会进入同步代码块进行第二次检查和实例化。这种方式提高了并发性能,因为...

Global site tag (gtag.js) - Google Analytics