zoukankan      html  css  js  c++  java
  • 设计模式:单件模式

    Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。

    1. 单线程时方法

    public sealed class Singlton
    {
        static Singlton instance = null;
        Singlton()
        { }
    
        public static Singlton Instance
        {
            get
            {
                if (instance == null)
                {
                    return new Singlton();
                }
                return instance;
            }    
        }    
    }

    这句if (instance == null)不是线程安全的,可能产生多个实例。

    2.线程安全的

    public sealed class Singlton
    {
        static Singlton instance = null;
    
        static readonly object o = new object();
    
        Singlton()
        { }
    
        public static Singlton Instance
        {
            get
            {
                lock (o)
                {
                    if (instance == null)
                    {
                        return new Singlton();
                    }
                    return instance;
                }
            }    
        }    
    }

    对象实例由最先进入的那个线程创建,后来的线程在进入时(instence == null)为假,不会再去创建对象实例了。但是这种实现方式增加了额外的开销,损失了性能。

    3. 双重锁定

    public sealed class Singlton
    {
        static Singlton instance = null;
    
        static readonly object o = new object();
    
        Singlton()
        { }
    
        public static Singlton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (o)
                    {
                        if (instance == null)
                        {
                            return new Singlton();
                        }
                    }
                }
                return instance;
            }
        }
    }

    避免了每个 Instance 属性方法的调用中都出现独占锁定。

    4. 静态初始化

    public sealed class Singlton
    {
        static readonly Singlton instance = new Singlton();
    
        static Singlton()
        { }
    
        public static Singlton Instance
        {
            get
            {
                return instance;
            }
        }
    }

    5. 延迟静态初始化

    public sealed class Singlton
    {       
    
        static Singlton()
        { }
        
        public static Singlton Instance
        {
            get
            {
                return CreateSinglton.instance;
            }
        }
        
        class CreateSinglton
        {
            internal static readonly Singlton instance = new Singlton();
        
            static CreateSinglton() { }
        }
    }
  • 相关阅读:
    TortoiseGit 的下载与安装
    CountDownLatch在多线程程序中的应用
    IDEA中maven的依赖jar包报红
    监控中的TP50
    BeanUtils.copyProperties方法,当属性Date为null解决
    SimpleDateFormat的安全问题解决方法
    java修饰符用法
    java实现快速排序
    京东2016实习生编程题—生日礼物
    美图笔试算法题(两个人拿石头判断输赢)
  • 原文地址:https://www.cnblogs.com/cnblogsfans/p/1611183.html
Copyright © 2011-2022 走看看