常见设计模式,单例模式(双重检测锁方式)示例
单例模式的实现方式有很多,常用的是双重检测锁方式,优点是代码简单,逻辑清晰,缺点是极其稀少情况下会失效。
当然,用枚举方式或静态内部类方式更值得推荐。
总之,作为反模式应用,这个算简单高效的。示例如下:
/*** 单例模式(双重检测锁,分三步):* 一、定义静态实例变量;* 二、隐藏构造函数;* 三、公开静态方法供外部调用以返回静态实例对象。* <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
常见设计模式,单例模式(双重检测锁方式)示例相关推荐
- 单例模式-双重校验锁
package designmode.single;//懒汉式单例 public class LazyMan {// 1.创建类的私有构造器private LazyMan() {}// 2.创建类的私 ...
- 单例模式双重校验锁_滴滴面试官:如何实现一个线程安全的单例模式
单例模式作为最常见的设计模式,有很多实现方式,今天介绍一下单例模式相关的内容. 什么是单例模式 从字面上理解,单例模式需要确保一个类只有一个对象.比如线程池.缓存.日志对象.打印机驱动对象.显卡驱动对 ...
- 单例模式双重校验锁_被面试官虐过之后,他轻蔑的问我:你还说你了解单例模式吗?...
单例,大家肯定都不陌生,这是Java中很重要的一个设计模式.其实单例模式看上去简单,实际上却有很多容易被忽视的地方,因为他涉及到一些线程安全的问题,稍不留神就可能入坑. 本文,就通过一次面试经历来深入 ...
- 常见设计模式—单例模式(Singleton)
前言 好久没写东西了,但是想着无论什么事还是要坚持自己初心要坚持的东西.写东西不能断! 对于常用的23种设计模式,这里笔者会根据自己学习和出现频率.重要程度进行学习记录吧.并且每种设计模式可能会根据暂 ...
- Java单例模式双重检查锁定中volatile关键字的作用
首先要说的是,个人推荐使用饿汉模式和静态内部类方式实现单例模式.其实,静态内部类里也是一个饿汉模式. 懒汉模式中,双重检查锁定代码如下: public class Singleton{ // 静态属性 ...
- 面试题:双重检验锁⽅式实现 单例模式
面试题:双重检验锁方式实现 单例模式 关键词 volatile 禁⽌ JVM 中 构造方法的 指令重排 编码实现 public class Singleton {private volatile st ...
- 双重检查锁模式导致空指针
今天遇到一个问题:莫名奇妙报了个空指针,后来发现原来单例模式在高并发下引起的: 双重检查锁模式的一般实现: 双重检查锁模式解决了单例.性能.线程安全问题,但是这种写法同样存在问题:在多线程的情况下,可 ...
- 软件设计模式“单例模式”和“工厂模式”
软件设计模式"单例模式"和"工厂模式" 单例模式 什么是单例模式 单例模式的实现方式有哪些 单例模式的优缺点 单例模式的应用场景 总结 工厂模式 什么是工厂模式 ...
- 设计模式——单例模式
一.介绍 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...
最新文章
- 计算机多媒体运用的ppt课件,《计算机多媒体》PPT课件.ppt
- Nature Reviews:拥抱未知:解析土壤微生物组的复杂性
- CMD命令行下载文件
- 桌面程序explorer_备份Internet Explorer 7搜索提供程序列表
- MySQL基础入门学习【2】数据类型
- 按相反的顺序输出列表的元素python_Python练习实例32 | 如何以相反的顺序来输出列表的值?...
- java selenium_关于selenium的介绍
- [SCOI 2010]字符串
- springboot报错Table 'wechat.hibernate_sequence' doesn't exist
- javaWEB知识总结——Ajax和Json
- swift 运算符快速学习(建议懂OC或者C语言的伙伴学习参考)
- 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目
- vscode自定义代码片段
- vs2012 链接内置数据库 sql express 出现error 26 解决方法
- Android 12 源码下载、编译与烧录到Pixel 3a
- PDF Expert for Mac 2.5.5 中文版 — PDF编辑工具
- 常用图片格式JPG\PNG\SVG该如何选择?
- 域名如何绑定到服务器ip
- CGMH: Constrained Sentence Generation by Metropolis-Hastings Sampling
- MACD金叉死叉能不能提前预警?2020上半年MACD金叉死叉的效果如何?
热门文章
- [LeetCode]3.Longest Substring Without Repeating Characters
- 经典排序算法 - 鸽巢排序Pigeonhole sort
- sql随机实现,sql GUID
- Tomcat常见问题 (配置)及解决方法
- 【超详细】DBCP连接池配置参数说明
- UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 658: illegal multibyte sequence
- 求你了,别再用 pip 那乌龟的速度去安装库了!
- centos中python2.7被覆盖,yum,python重新安装
- 设计模式 - 观察者模式(JDK)
- JS小数点加减乘除运算后位数增加的解决方案