单例模式的三种写法(设计模式)
来源:互联网 发布:sql identity 编辑:程序博客网 时间:2024/05/29 18:36
1.延迟实例化
当我们不急切需要一个实例时,也就是当用户需要一个实例时,再创建实例。
a.同步低效率版
public class Singleton { private static Singleton uniqueInstance; //私有化构造方法,防止用户通过构造器构造 private Singleton(){} //同步方法,同一时间,只允许一个用户调用该方法获取实例 public static synchronized Singleton getInstance(){ if (uniqueInstance == null){ uniqueInstance = new Singleton(); } return uniqueInstance; }}这种写法虽然简单,但是效率低下,实际上同步只需要在实例未创建完成时起作用就可以,防止多线程使得多个用户得到不同的实例。而已经有了一个实例的时候,同步就不需要了。如果你不关心效率,就可以用该方法,简单清晰。
b.双重检查加锁
public class Singleton { //volatile关键词确保:档uniqueInstance变量被初始化成Singleton实例时,多个线程正确的处理uniqueInstance变量 private volatile static Singleton uniqueInstance; //私有化构造方法,防止用户通过构造器构造 private Singleton(){} public static Singleton getInstance(){ if (uniqueInstance == null){//检查实例,如果不存在就进入同步区块,只有第一次才彻底执行这里的代码 synchronized (Singleton.class){ if (uniqueInstance == null){//进入区块后,再检查一次,如果仍是null,才创建实例。 uniqueInstance = new Singleton(); } } } return uniqueInstance; }}2.急切实例化
在静态初始化中创建单价,保证了线程安全,用户需要用时,实例已经生成好。
public class Singleton { private volatile static Singleton uniqueInstance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return uniqueInstance; }}
1 0
- 单例模式的三种写法(设计模式)
- Java设计的单例模式(三种写法)
- 单例模式的三种写法
- 单例模式的三种写法
- 设计模式之单例模式的两种写法
- 设计模式之单例模式的7种写法
- 设计模式之单例模式的七种写法
- 【设计模式】【二】单例模式的七种写法
- 设计模式之单例模式的几种写法
- 【设计模式】 单例模式的几种写法
- 设计模式--单例模式的5种写法
- 【设计模式】单例模式的6种写法
- 设计模式:单例模式的写法(基础写法和线程安全写法)
- 单例模式常用三种写法
- C#单例模式的三种写法
- C#单例模式的三种写法
- C#单例模式的三种写法
- C#单例模式的三种写法
- 剑指offer习题JAVA实现(二)
- java: Compilation failed: internal java compiler error 解决方法
- 【EJB】Developing EJB Applications -- Chapter7(容器和客户端拦截器)
- 机器学习KNN python算法实现
- c#快捷键
- 单例模式的三种写法(设计模式)
- 面试体会及感想
- 动态规划3
- hadoop自定义输入格式(InputFormat)
- 【Javascript基础】
- 搭建django cms时遇到的问题
- 排序算法
- [设计模式]工厂方法模式(factory method)
- int main() 与 void main()