(参考:http://www.cnblogs.com/java-my-life/archive/2012/03/31/2425631.html)

双重检查加锁:(1)既实现线程安全,又能够使性能不受很大的影响。那么什么是“双重检查加锁”机制呢?   (2)所谓“双重检查加锁”机制,指的是:并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法后,先检查实例是否存在,如果不存在才进行下面的同步块,这是第一重检查,进入同步块过后,再次检查实例是否存在,如果不存在,就在同步的情况下创建一个实例,这是第二重检查。这样一来,就只需要同步一次了,从而减少了多次在同步情况下进行判断所浪费的时间。(3)“双重检查加锁”机制的实现会使用关键字volatile,它的意思是:被volatile修饰的变量的值,将不会被本地线程缓存,所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。       (4)由于volatile关键字可能会屏蔽掉虚拟机中一些必要的代码优化,所以运行效率并不是很高。因此一般建议,没有特别的需要,不要使用。也就是说,虽然可以使用“双重检查加锁”机制来实现线程安全的单例,但并不建议大量采用,可以根据情况来选用。

/*** Project Name:DesignPatterns* File Name:Single.java* Package Name:com.louis.singlePattern* Date:2017年9月26日下午9:24:31* Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.*
*/package com.louis.singlePattern;
/*** ClassName:Single * Function: TODO ADD FUNCTION. * Reason:     TODO ADD REASON. * Date:     2017年9月26日 下午9:24:31 * @author   michael* @version  * @since    JDK 1.7* @see      */
public class Single {public volatile static  Single instanceSingle = null;private Single(){}public static Single getInstance(){//首先检查实例存不存在if(instanceSingle == null){//同步块,线程安全的创建实例synchronized (Single.class) {//再次检查实例是否真的存在,如果不存在则真正创建实例if(instanceSingle == null){instanceSingle = new Single();}}}return instanceSingle ;}}

转载于:https://www.cnblogs.com/Michael2397/p/7599073.html

单例模式-双重检查加锁相关推荐

  1. 【线程安全】—— 单例类双重检查加锁(double-checked locking)

    1. 三个版本单例类的实现 版本1:经典版 public class Singleton {public static Singleton getInstance() {if (instance == ...

  2. 单例模式“双重检查锁定Double-Checked Locking”线程安全问题

    几篇合集. 1 单例模式"双重检查锁定Double-Checked Locking"线程安全问题 https://blog.csdn.net/wabiaozia/article/d ...

  3. Java单例模式双重检查锁定中volatile关键字的作用

    首先要说的是,个人推荐使用饿汉模式和静态内部类方式实现单例模式.其实,静态内部类里也是一个饿汉模式. 懒汉模式中,双重检查锁定代码如下: public class Singleton{ // 静态属性 ...

  4. java和C++之单例类双重检查加锁

    1.Java public class Singleton {private volatile static Singleton instance;public static Singleton ge ...

  5. java高分面试指南:java单例模式双重检查

    1. CAP 的由来 要理解 CAP,首先我们要清楚,为何会有人提出 CAP?他提出 CAP 是为了解决什么问题? 时间回到 1985 年,彼时,后来证明了 CAP 理论的 Lynch 教授此时给当时 ...

  6. java 双重检查加锁弊端

    http://blog.csdn.net/axman/article/details/1089196 Java是在语言级提供对线程的支持,所以Java的内存模型分为主存储器和工作存储器. [Main  ...

  7. java单例模式双重检查

    public class Singleton {private static volatile Singleton singleton;private Singleton() {}public sta ...

  8. Java双重检查懒汉式单例模式中volatile的作用

    先看下懒汉式单例模式双重检查的写法 public class Lazy2 {private volatile static Lazy2 instance;private Lazy2 (){}publi ...

  9. java 单例模式双重检索_单例模式:为什么要双重检测

    http://blog.sina.com.cn/s/blog_6b6468720100kpif.html 3.3  延迟加载的思想 单例模式的懒汉式实现方式体现了延迟加载的思想,什么是延迟加载呢? 通 ...

最新文章

  1. 一行代码集成带负数的自定义键盘
  2. Eclipse Tomcat调试timeout超时怎么办
  3. dvd清洗碟效果好吗_用什么清洗抽油烟机效果比较好?有哪些注意事项?
  4. LeetCode Hot100 ---- 二分查找专题
  5. 【原生JS插件】LoadingBar页面顶部加载进度条
  6. 2075. 解码斜向换位密码
  7. c++ 实现录音并且指定到文件_2020年的办公装备新选择,搜狗AI录音笔E1深度评测...
  8. .Net Core DI,如何在程序集中注册所有现有的可分配类型
  9. No module named ‘yaml‘错误解决办法
  10. 如何能够做好主动沟通
  11. 浏览器渲染原理及web前端分析
  12. 饭店点餐系统之系统工作流程
  13. python 豆瓣源安装_python pip使用豆瓣源技巧和pip配置文件更改豆瓣源
  14. 【latex】Latex文献报错 Something‘s wrong--perhaps a missing \item. \end{thebibliography}
  15. C51连接远程服务器
  16. 电脑开机显示“被调用的对象已与其客户端断开连接”解决方法
  17. 个人码支付申请官网(教程)
  18. PO、VO、DO、TO、DTO、 BO、 QO、DAO、POJO
  19. 毕业设计管理系统 数据库设计
  20. SpringBoot+Vue实现前后端分离的旅游网站

热门文章

  1. 重磅!全球Top 1000计算机科学家h指数公布:中国53位学者上榜!
  2. 阿里达摩院-视觉方向(校招、社招、实习),欢迎各路大神
  3. 数据结构(十)二叉排序树
  4. 部编版是什么版本_教材部编版和人教版的区别
  5. python编程高手教程_写给编程高手的Python教程(01) 数据结构
  6. mysql 的client_mysql(一)-客户端Client相关
  7. python selenium 文件上传_python-selenium -- 文件上传操作
  8. ES6-异步编程-Promise对象
  9. 小汤学编程之MySQL(一)——基本概念、使用前的准备和了解SQL
  10. 数据结构中的堆和操作系统里的堆不一样为什么都叫堆呢?