单例模式几种实现方式
来源:互联网 发布:活了一百万次的猫 知乎 编辑:程序博客网 时间:2024/05/14 08:49
除未经优化的懒汉式存在多线程环境下的线程安全问题,其它都可以在多线程环境下正常运行
静态内部类利用了java语言自带特性,未必适用于其它语言环境
单例模式构造函数为私有 故单例模式类不可被继承
1 . 饿汉式
public class Singleton { private static Singleton instance = new Singleton(); //静态私有 成员变量 直接实例化 private Singleton(){} //私有 构造函数 public static Singleton getInstance(){ //静态公有 工厂方法 return instance; }}
2 . 懒汉式 (未经优化 存在线程安全问题)
public class Singleton { private static Singleton instance; //静态私有 成员变量 private Singleton(){} //私有 构造函数 public static Singleton getInstance(){ //静态公有 工厂方法 if (instance == null) instance = new Singleton(); return instance; }}
3 . 工厂方法添加同步锁的懒汉式
public class Singleton { private static Singleton instance; //静态私有 成员变量 private Singleton(){} //私有 构造函数 synchronized public static Singleton getInstance(){ //静态公有 加同步锁 工厂方法 if (instance == null) instance = new Singleton(); return instance; }}
4 . 双重检查(double check)的懒汉式
public class Singleton { //volatile关键字的两层语义: //保证了不同线程对这个变量进行操作时的可见性 //禁止进行指令重排序 private volatile static Singleton instance; //静态私有volatile 成员变量 private Singleton(){} //私有 构造函数 public static Singleton getInstance(){ //静态公有 工厂方法 if (instance == null){ synchronized (Singleton.class){ //对单独一句话加锁等于没加 if (instance == null) instance = new Singleton(); } } return instance; }}
5 . 静态内部类(java语言环境下最好的实现方式)
public class Singleton { private Singleton(){} //私有 构造函数 private static class SingletonBuilder{ //静态内部类 private static Singleton instance = new Singleton(); } public static Singleton getInstance(){ return SingletonBuilder.instance; }}
0 0
- 单例模式几种实现方式
- 单例模式singleton的几种实现方式
- 单例模式的几种实现方式的对比
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式比较
- C#单例模式的几种实现方式
- 单例模式的几种实现方式总结
- Java单例模式几种实现方式
- 常用设计模式-单例的几种实现方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- Java单例模式的几种实现方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- 单例模式实现的几种方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- Linux本地磁盘(硬盘)介绍
- JS笔记:undefined和null
- 顺序队列的初始化
- 第四章:变量、作用域和内存问题
- Android intent 显示和隐士意图
- 单例模式几种实现方式
- Ubuntu下启动、停止、重启MySQL,查看错误日志命令大全.note
- 关于add和Floodfill的记录
- Dijsktra算法原理介绍及java源码实践
- 链队列的初始化
- android学习第四天,其他UI控件
- 第五章:引用类型
- 【leetcode】3Sum
- MySQL常用语句一、连接MySQL格式:mysql-h主机地址-u用户名-p用户密