Java设计模式之单例模式(七种写法)
Java设计模式之单例模式(七种写法)
第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作:
public class Singleton {private static Singleton instance;private Singleton (){}//私有化构造方法,防止类被实例化public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;} }
第二种,懒汉式,lazy初始化,线程安全:
- 优点:第一次调用才初始化,避免内存浪费。
- 缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
public class Singleton {private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
第三种,饿汉式,不是lazy初始化,线程安全:
- 优点:没有加锁,执行效率会提高。
- 缺点:类加载时就初始化,浪费内存。
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance;} }
第四种,饿汉式,lazy初始化,线程安全:
public class Singleton {private Singleton instance = null; static { instance = new Singleton();} private Singleton (){} public static Singleton getInstance() { return this.instance;} }
第五种,静态内部类,lazy初始化,线程安全: 区别第三种,Singleton 类被装载了,instance 不一定被初始化。因为 SingletonHolder 类没有被主动使用;只有通过显式调用 getInstance 方法时,才会显式装载 SingletonHolder 类,从而实例化 instance。
public class Singleton {private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton();} private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE;} }
第六种(枚举),不是lazy初始化,线程安全:
public enum Singleton {INSTANCE; public void whateverMethod() { } }
第七种,双重校验锁DCL(double-checked locking),lazy初始化,线程安全:JDK1.5 起,采用双锁机制,安全且在多线程情况下能保持高性能。
public class Singleton {private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) {synchronized (Singleton.class) {if (singleton == null) {singleton = new Singleton();}}}return singleton;} }
转载于:https://www.cnblogs.com/shen-hua/p/8179046.html
Java设计模式之单例模式(七种写法)相关推荐
- java设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
- java设计模式之——单例模式(八种实现)
一.介绍 有时,我们需要某个类的实例始终只有一个,举个例子,如果用面向对象语言写的操作系统,那么桌面这个实例肯定就只有一个,无论从哪个地方进入的桌面,都是同一个. 所谓类的单例设计模式,就是采取一定的 ...
- 设计模式:单例模式7种写法
原文链接:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): Java代码 public class Singleton {private st ...
- java中单例的几种写法
java中单例的几种写法 一单例模式常见的写法 二枚举类型实现单例模式 java中单例的几种写法 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系 ...
- JAVA设计模式总结之23种设计模式(重点!!!)
JAVA设计模式总结之23种设计模式: 一.什么是设计模式 设计模式遵循的原则有6个: 二.设计模式的三个分类 三.各分类中模式的关键点 四.概说23种设计模式 1.单例模式(Singleton) 2 ...
- Java设计模式之单例模式的学习
本篇是本人的第二篇博客 旨在记录本人对于Java设计模式之单例模式的学习和理解,也希望本篇可以对一些正在学习的小伙伴起到一些帮助 单例模式(singleton)的特点: 1.单例模式有且仅有一个实例: ...
- 总结一下Java中SQL的九种写法
因为在做持久层工具开发,现总结一下各种SQL的写法,也算是清晰一下自已的思路: 第一种写法 public void someMethod(){ try Connection conn=...; con ...
- python条件语句代码例子_Python 炫技操作:条件语句的七种写法
原标题:Python 炫技操作:条件语句的七种写法 作者 | 写代码的明哥 责编 | 郭芮 有的人说 Python 入门容易,但是精通难的语言,这点我非常赞同. Python 语言里有许多(而且是越来 ...
- JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手
JS奇淫技巧:数值的七种写法 JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手 你知道吗?在JS编程中,数值可以有很多种写法. 第一种写法: 一般情况而言,数值就是数值. 比如: v ...
最新文章
- Unity 4.x游戏开发技巧集锦(内部资料)
- redhat中使用securecrt 中文乱码解决办法
- 在Eclipse新建菜单中添加JSP
- MHA 日常维护命令集
- C可变参数详解及其函数设计
- PHPExcel设置自动列宽
- python变量后面加星号_Python基础找茬系列20--python函数的秘密
- 【转】Vue.js入门教程(二)在页面中引入vue的方式
- 2030年春节,你会跟机器人一起过吗?
- 奥运奖牌计数(信息学奥赛一本通-T1064)
- Centos/Linux下如何查看网关地址/Gateway地址
- 二叉树最小单元结点的实现
- HyperLedger/Fabric JAVA-SDK with 1.1
- 产品经理改需求这件事
- 版权符号圈c的输入方法
- Vim实用技巧_7.模式匹配和查找
- Extracting Multiple-Relations in One-Pass with Pre-Trained Transformers [论文研读]
- Arcgis中topolopy(摘自网络)
- “您希望继续执行吗? [Y/n] y 中止。”
- 洞洞板上的TQFP芯片的焊接模式
热门文章
- C++之new再探究
- python itchat 无法登录_项目分享|5步教你用Python制作朋友圈个性签名
- tensorflow中同时两个损失函数_深度度量学习中的损失函数
- linux rdma服务,在Linux中infiniband rdma差转转bw
- mysql group b_mysql报错之5.7版本的 group by mysql不能使用group by
- linux db2表空间目录,db2 表空间的一些知识
- android 获取已安装应用的安装包,Android获取设备已安装的应用
- html 倒计时字体消失,最简单的一个网页倒计时代码 时间到期后会显示出提醒内容 收藏版...
- java 数据库操作教程_数据库基本操作:增删改查及联表操作
- dcdc芯片效率不高的原因_电动汽车DCDC变换器应用详解