单例模式
来源:互联网 发布:达内python视频下载 编辑:程序博客网 时间:2024/05/24 03:46
第一种(懒汉,线程不安全):
这种方法在多线程的情况下不能工作
public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
第二种(懒汉,线程安全):
这种方法在多线程中可以工作,但是直线效率比较低,在我们实际开发中有绝大部分的情况下是不需要同步的
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
第三种(饿汉):
这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达到lazy loading的效果。
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }
第四种(饿汉,变种):
public class Singleton { private Singleton instance = null; static { instance = new Singleton(); } private Singleton (){} public static Singleton getInstance() { return this.instance; } }
第六种(枚举):
public enum Singleton { INSTANCE; public void whateverMethod() { } }
第七种(双重校验锁):
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; } }
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- Remove Duplicates from Sorted List II
- 第15周 项目1 - 验证算法
- 第十一周项目一:验证算法(2)二叉树构造算法的验证
- 第十五周项目3-B-树的基本操作
- Connecting with Wi-Fi Direct
- 单例模式
- 【工具学习】——教你读懂Maven的配置文件
- 第十三周项目5—拓扑排序算法的验证
- JSON 之JAVA 解析
- Get an istream from a char*
- DIV CSS网站布局八个小技巧
- 第十五周实践项目1—验证算法(3)希尔排序
- POI - generate xls file
- Json数据的解析_Gson