单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)...
首先这两种方式都是延迟初始化机制,就是当要用到的时候再去初始化。
但是Effective Java书中说过:除非绝对必要,否则就不要这么做。
1. DCL (double checked locking)双重检查:
如果出于性能的考虑而需要对实例域(注意这个属性并没有被static修饰)使用延迟初始化,就使用双重检查模式
public class Singleton {private volatile Singleton uniqueInstance;private Singleton(){}public static Singleton getInstance(){if(uniqueInstance == null){ //#1synchronized(Singleton.class){ //#2if(uniqueInstance == null){ //#3uniqueInstance = new Singleton(); //#4System.out.println(Thread.currentThread().getName() + ": uniqueInstance is initalized..."); //#5.1} else {System.out.println(Thread.currentThread().getName() + ": uniqueInstance is not null now..."); //#5.2 }}}return uniqueInstance;} }
2. lazy initialization holder class(静态内部类):
如果出于性能的考虑而需要对静态域(注意这个属性被static修饰)使用延迟初始化,就使用lazy initialization holder class模式。
1 public class Singleton { 2 3 private static class SingletonHolder { 4 /** 5 * 静态初始化器,由JVM来保证线程安全 6 */ 7 private static Singleton instance = new Singleton(); 8 } 9 10 private Singleton(){ 11 } 12 13 public static Singleton getInstance(){ 14 return SingletonHolder.instance; 15 } 16 }
最后,以上两种方法都不是实现单例模式的最好方式,最好的是枚举模式,coming soon...
转载于:https://www.cnblogs.com/damonhuang/p/5439655.html
单例模式的两种实现方式对比:DCL (double check idiom)双重检查 和 lazy initialization holder class(静态内部类)...相关推荐
- 【无标题】单例模式的两种创建方式:饿汉式和懒汉式
这里写自定义目录标题 单例模式的两种创建方式:饿汉式和懒汉式 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂 ...
- Java两种多线程方式对比总结 模拟铁路售票案例
继承Thread类创建多线程 在Thread类中,提供了一个start()方法,会启动一个新线程并自动调用run()方法 假设售票厅有五个窗口可发售200张票.200张票可以看作是共享的资源,五个窗口 ...
- 用python实现单例模式_Python单例模式的两种实现方式
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,某 ...
- 单例模式的两种实现方式:恶汉式和懒汉式
单例模式:采取一定的方法保证在整个软件系统中,对某个类只存在一个对象实例 恶汉式->缺点:对象加载时间过长 优点:是线程安全的 懒汉式->缺点:是线程不安全的 优点:延迟对象的创建 恶汉式 ...
- java两种绑定方式_java两种单例模式用法分析
本文实例讲述了java两种单例模式用法.分享给大家供大家参考,具体如下: 按照加载方式的不同,单例模式有两种实现: private:只能在同一个类中使用 static:该类是类方法,不能调用实例方法. ...
- Java多线程两种实现方式的对比
Java多线程两种实现方式的对比 一种,直接继承Thread类 一种,实现Thread类的Runnable接口 两种方式的区别 比如,售票厅有四个窗口,可以发售某日某次列出的100张车票,此时,100 ...
- php 恶汉单例,单例模式的两种方式(恶汉式,懒汉式)
单例模式的两种形式(恶汉式,懒汉式) 单例模式的特点:解决了一个类在内存的唯一性,这个类的对象只有一个. 写单例模式的步骤: 1. 私有修饰构造方法 2. 在本类的成员位置, new 自己类的对象 3 ...
- 单例模式的3种实现方式, 及其性能对比
2019独角兽企业重金招聘Python工程师标准>>> 1. 懒汉模式(double check), 线程安全, 效率不高, 可以延迟加载 public class Singleto ...
- 单例模式的几种实现方式详解以及原理
单例模式介绍 前言 这是一个的萌新写的博客,以下是学习课程以后的总结,用于个人的复习与总结,如果有误还请多多包容和指正. 了解单例模式: 单例类只能有一个实例 单例必须创建自己的唯一一个实例 单例类必 ...
最新文章
- msflexgrid允许大选择_工程中要用多大的电线电缆?一文教你怎么算
- stl-vector详解
- Nexys3学习手记1:写在前面的话
- String、StringBuffer和StringBuilde的区别
- 03.三月风雨愁断肠,学习大数据特别忧伤——谈谈AKS创建SQL Server大数据群集创建愁断肠
- python 伪多线程_Python实现简单多线程任务队列
- python pathos_python运行多线程库pathos时,pymongo递归深度溢出
- SQL SERVER数据库 查询sql 多表联查 top命令
- c语言编程 通讯录排序,C语言实现一个通讯录
- Android开发系列(十一) QQ登陆界面——Android控件使用实例
- php 检查货币类型_php 判断函数是否为费用类型(金额/货币:6.02)有小数点
- cfree5c语言编写贪吃蛇,刚学C语言,想写一个贪吃蛇的代码
- 2021-12-28学习的道路是寂寞的,学成后的成绩是惊艳的。喜欢热闹是生物的本性,耐得住寂寞方显人性尊贵
- 聊聊游戏本推荐排行榜 这一款竟成黑马
- 扩展访问:Uber Lite App开发始末
- Java中Date日期时间的工具类
- 传统文化,互联网时代的创业“传家之宝”
- RAM/ROM存储器的设计
- 第三讲财务报表是如何产生的(财务分析与决策)
- [L1 - 15分合集]吉老师的回归
热门文章
- Java Calendar.add()方法的使用,参数含义。指定时间差。
- 什么是原码、反码、补码?什么是按位与?范围数字按位与!
- 伍六七带你学算法 动态规划 ——不同路径
- Go语言的错误异常处理机制及其应用
- 3分钟4 步快速带你在win10电脑装上openCV3.4 (python使用)
- docker run 或者 docker restart 启动镜像就自动退出
- pandas dataframe 删除带空值的行 各种空值 (dropna()、isna()、isnull()、fillna())
- hexo框架个人博客的搭建(面试加分!)
- camera数字降噪(DNR)
- No subscribers registered for event class