单例模式的优化-双重锁定

简介: 三种单例模式写法: public class Singleton { private static Singleton instance; ...

三种单例模式写法:

    public class Singleton
    {
        private static Singleton instance;
        private static readonly object syncRoot = new object();
        private Singleton() { }
        public static Singleton GetInstance()
        {
            if (instance == null)//Double-Check Locking 双重锁定,比直接lock性能更好,最完美的模式(懒汉式单例)
            {
                lock (syncRoot)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    public class Singleton1
    {
        private static Singleton1 instance;
        private static readonly object syncRoot = new object();
        private Singleton1() { }
        public static Singleton1 GetInstance()
        {
            lock (syncRoot)//每次调用GetInstance都需要lock,影响性能(懒汉式单例)
            {
                if (instance == null)
                {
                    instance = new Singleton1();
                }
            }
            return instance;
        }
    }
    public class Singleton2
    {
        private static Singleton2 instance=new Singleton2();//静态初始化方式(饿汉式单例),类一加载就实例化对象,一般这样用也没问题,缺点:提前占用系统资源
        private Singleton2() { }
        public static Singleton2 GetInstance()
        {
            return instance;
        }
    }

双重锁定性能优化分析:

这里写图片描述

这里写图片描述

相关文章
|
6月前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
140 0
|
6月前
|
C++
C++实现单例模式-多种方式比较
单例模式,面试中经常被问到,但是很多人只会最简单的单例模型,可能连多线程都没考虑到,本文章从最简单的单例,到认为是最佳的单例模式实现方式,单例模式没有什么知识点,直接上源码
89 0
|
设计模式 安全 Java
JAVA设计模式1:单例模式,确保每个类只能有一个实例
JAVA设计模式1:单例模式,确保每个类只能有一个实例
114 0
|
设计模式 安全 Java
特殊类设计及单例模式(C++)
特殊类设计及单例模式(C++)
76 1
单例模式设计(一)
饿汉模式 由名字我们就可以知道 "饿汉" 嘛,就比较急切,在类加载的时候就创建实例: 1. 写一个类,在本类中构造实例,用static修饰,直接创建出来(提供一个现有的实例) 2. 在本类中写一个方法获取到上面的实例 3. 将这个类的构造方法设置为私有的,让外部不能 new 这个对象
61 0
|
安全 Java 编译器
单例模式的4种实现方式
单例模式的4种实现方式
105 0
|
6月前
|
设计模式 安全 Java
Java设计模式—单例模式的实现方式和使用场景
那么为什么要有单例模式呢?这是因为有的对象的创建和销毁开销比较大,比如数据库的连接对象。所以我们就可以使用单例模式来对这些对象进行复用,从而避免频繁创建对象而造成大量的资源开销。
154 1
|
6月前
|
设计模式 安全 Java
多线程案例-单例模式
多线程案例-单例模式
260 0
|
6月前
|
设计模式 安全 编译器
c++单例模式-6种单例层层迭代优化
6种单例模式,层层迭代优化
48 1
|
安全
单例模式设计(二)
根据上面的 "懒汉模式" 和 "饿汉模式"。我们可以知道,懒汉模式,它只是负责读取,没有修改。而 " 饿汉模式 " 是既读取,也进行修改。所以来说, "懒汉模式" 是线程安全的, "饿汉模式" 是线程不安全的。
66 0