单例模式的实现方式有很多,常用的是双重检测锁方式,优点是代码简单,逻辑清晰,缺点是极其稀少情况下会失效。

当然,用枚举方式或静态内部类方式更值得推荐。

总之,作为反模式应用,这个算简单高效的。示例如下:

/*** 单例模式(双重检测锁,分三步):* 一、定义静态实例变量;* 二、隐藏构造函数;* 三、公开静态方法供外部调用以返回静态实例对象。* <br/>* 也许,以volatile修饰静态变量能让本单例更有效*/
public class SingletonDemo {/*** 单例模式(三步之一):* 定义静态实例变量;*/private static SingletonDemo instance;
//    private static volatile SingletonDemo instance;    /*** 单例模式(三步之二):* 隐藏构造函数;*/private SingletonDemo() {}    /*** 单例模式(三步之三):* 公开静态方法供外部调用以返回静态实例对象。* @return 返回该单例类的全局唯一实例对象。*/public static SingletonDemo getInstance() {//测试确保静态实例对象尚未实例化,范围是是当前线程内if(instance==null) {//同步线程内的该单例类synchronized (SingletonDemo.class) {//再次测试确保静态实例对象尚未实例化,同步后范围就代表所有线程if(instance==null) {//经两次测试后还为null时,即可放心地实例化这个单例对象了instance = new SingletonDemo();}}}return instance;}}

转载于:https://www.cnblogs.com/godwithus/p/9607710.html

常见设计模式,单例模式(双重检测锁方式)示例相关推荐

  1. 单例模式-双重校验锁

    package designmode.single;//懒汉式单例 public class LazyMan {// 1.创建类的私有构造器private LazyMan() {}// 2.创建类的私 ...

  2. 单例模式双重校验锁_滴滴面试官:如何实现一个线程安全的单例模式

    单例模式作为最常见的设计模式,有很多实现方式,今天介绍一下单例模式相关的内容. 什么是单例模式 从字面上理解,单例模式需要确保一个类只有一个对象.比如线程池.缓存.日志对象.打印机驱动对象.显卡驱动对 ...

  3. 单例模式双重校验锁_被面试官虐过之后,他轻蔑的问我:你还说你了解单例模式吗?...

    单例,大家肯定都不陌生,这是Java中很重要的一个设计模式.其实单例模式看上去简单,实际上却有很多容易被忽视的地方,因为他涉及到一些线程安全的问题,稍不留神就可能入坑. 本文,就通过一次面试经历来深入 ...

  4. 常见设计模式—单例模式(Singleton)

    前言 好久没写东西了,但是想着无论什么事还是要坚持自己初心要坚持的东西.写东西不能断! 对于常用的23种设计模式,这里笔者会根据自己学习和出现频率.重要程度进行学习记录吧.并且每种设计模式可能会根据暂 ...

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

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

  6. 面试题:双重检验锁⽅式实现 单例模式

    面试题:双重检验锁方式实现 单例模式 关键词 volatile 禁⽌ JVM 中 构造方法的 指令重排 编码实现 public class Singleton {private volatile st ...

  7. 双重检查锁模式导致空指针

    今天遇到一个问题:莫名奇妙报了个空指针,后来发现原来单例模式在高并发下引起的: 双重检查锁模式的一般实现: 双重检查锁模式解决了单例.性能.线程安全问题,但是这种写法同样存在问题:在多线程的情况下,可 ...

  8. 软件设计模式“单例模式”和“工厂模式”

    软件设计模式"单例模式"和"工厂模式" 单例模式 什么是单例模式 单例模式的实现方式有哪些 单例模式的优缺点 单例模式的应用场景 总结 工厂模式 什么是工厂模式 ...

  9. 设计模式——单例模式

    一.介绍 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...

最新文章

  1. 计算机多媒体运用的ppt课件,《计算机多媒体》PPT课件.ppt
  2. Nature Reviews:拥抱未知:解析土壤微生物组的复杂性
  3. CMD命令行下载文件
  4. 桌面程序explorer_备份Internet Explorer 7搜索提供程序列表
  5. MySQL基础入门学习【2】数据类型
  6. 按相反的顺序输出列表的元素python_Python练习实例32 | 如何以相反的顺序来输出列表的值?...
  7. java selenium_关于selenium的介绍
  8. [SCOI 2010]字符串
  9. springboot报错Table 'wechat.hibernate_sequence' doesn't exist
  10. javaWEB知识总结——Ajax和Json
  11. swift 运算符快速学习(建议懂OC或者C语言的伙伴学习参考)
  12. 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目
  13. vscode自定义代码片段
  14. vs2012 链接内置数据库 sql express 出现error 26 解决方法
  15. Android 12 源码下载、编译与烧录到Pixel 3a
  16. PDF Expert for Mac 2.5.5 中文版 — PDF编辑工具
  17. 常用图片格式JPG\PNG\SVG该如何选择?
  18. 域名如何绑定到服务器ip
  19. CGMH: Constrained Sentence Generation by Metropolis-Hastings Sampling
  20. MACD金叉死叉能不能提前预警?2020上半年MACD金叉死叉的效果如何?

热门文章

  1. [LeetCode]3.Longest Substring Without Repeating Characters
  2. 经典排序算法 - 鸽巢排序Pigeonhole sort
  3. sql随机实现,sql GUID
  4. Tomcat常见问题 (配置)及解决方法
  5. 【超详细】DBCP连接池配置参数说明
  6. UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 658: illegal multibyte sequence
  7. 求你了,别再用 pip 那乌龟的速度去安装库了!
  8. centos中python2.7被覆盖,yum,python重新安装
  9. 设计模式 - 观察者模式(JDK)
  10. JS小数点加减乘除运算后位数增加的解决方案