所谓双重检查加锁机制,指的是:并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法过后,先检查实例是否存在,如果不存在才进入下面的同步块,这是第一重检查。进入同步块过后,再次检查实例是否存在,如果不存在,就在同步的情况下创建一个实例,这是第二重检查。这样一来,就只需要同步一次了,从而减少了多次在同步情况下进行判断所浪费的时间。
双重检查加锁机制的实现会使用一个关键字volatile,它的意思是:被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。
看看代码可能会更加清楚些。示例代码如下:
public class SingletonDemo {
private SingletonDemo() {
}
private volatile static SingletonDemo singleton = null;
public static SingletonDemo getInstance() {
if (singleton == null) {
synchronized (SingletonDemo.class) {
if (singleton == null) {
singleton = new SingletonDemo();
}
}
}
return singleton;
}
}
这种实现方式可以实现既线程安全地创建实例,而又不会对性能造成太大的影响。它只是在第一次创建实例的时候同步,以后就不需要同步了,从而加快了运行速度。
分享到:
相关推荐
CAD文件枷锁与去除枷锁工具.zip cad文件加密,去除与安上枷锁工具。
注册表枷锁
7z文件枷锁器dll 适合7z文件枷锁器dll 7z文件枷锁器dll
这种“文件夹枷锁”功能是信息安全的重要组成部分,特别是在个人电脑和企业环境中。 【描述】:这个VB文件夹枷锁应用设计的核心目标是提供简单易用的安全措施,以加密和隐藏选定的文件夹。它通过设置密码来限制对...
然而,许多创新思维的阻碍源于我们自身的思维定式,这些定式就像枷锁一样限制了我们的想象力和创新能力。思维定式是由我们的文化传统、个人经历以及知识积累形成的,它们在帮助我们处理日常问题时起到积极的作用,但...
很不错的,信息枷锁器,建议大家用用,保护你的隐私,呵呵,看看,赶快下载吧
Android 应用签名的枷锁与革新 概要 • Android 应⽤用签名简介 •签名对 Android ⽣生态的意义 •应⽤用签名的局限和⽣生态乱象 •既有解决⽅方案 • OASP: 救赎与⾰革新
《初中语文文摘》中的这篇文章以“人生的人生的枷锁”为题,旨在探讨人们在生活中的情感依赖与自我成长的主题。在这个过程中,我们常常不自觉地给自己套上无形的枷锁,这些枷锁可能是对某个人、某种习惯或者某种环境...
【标题】"初中语文文摘人生抛开纸枷锁"主要探讨的是个人在生活中面临的各种社会期望和束缚,以及如何寻求自由和自我实现的过程。【描述】中提到的"纸枷锁"指的是那些看似重要但实际上可以轻易挣脱的束缚,比如传统...
黄金级枷锁
OPPO枷锁工具包是一款专为OPPO手机用户设计的软件工具,主要用于解除OPPO手机的官方锁定状态,以便进行更自由的系统定制和优化。这个工具包包含了OPPO官方提供的解锁工具,允许用户解锁Bootloader,从而可以安装第三...
苹果ios枷锁工具
《Android 应用签名的枷锁与革新》这本书深入探讨了Android应用签名的重要性和相关机制,它是Android开发者理解和优化应用程序发布流程的关键。Android应用签名是确保应用安全、完整性和可更新性的基石,同时也是...
首先我们来看下单例模式的定义: ...在其他的一些项目中还使用了双重检测枷锁机制。 现在我们来看下代码,我会提供代码下载供大家参考。 文章详情:http://blog.csdn.net/michael_yy/article/details/7883621
【标题】:“初中语文文摘励志打破心灵的枷锁”所蕴含的人生智慧 【描述】:这段文字通过几个富有哲理的故事,传达了一个深刻的主题——打破心灵的枷锁,释放内心的自我,找到生活的美好和坚韧的力量。这不仅适用于...
创新思维是推动社会发展和个人进步的重要动力,然而,我们的思考方式往往会受到各种枷锁的限制,这些枷锁主要包括思维定势、从众型思维和权威型思维。这些枷锁阻碍了我们对新想法的探索和接纳,限制了创新能力的发挥...