美文网首页
单件模式(单利模式)

单件模式(单利模式)

作者: 阳光的技术小栈 | 来源:发表于2018-01-22 15:13 被阅读4次

    单件模式确保一个类只有一个实例,并提供一个全局访问点。

    单线程

    public class Singleton {
         private static Singleton uniqueInstance;
         private Singleton () {}
         public static Singleton getInstance() {
             if (uniqueInstance == null) {
                  uniqueInstance = new Singleton();
             }
             return uniqueInstance;
         }
    }
    

    多线程同步

    可以解决多线程访问,但同步getInstance方法会造成额外的负担,频繁调用可能会使程序执行效率下降100倍。

    public class Singleton {
         private static Singleton uniqueInstance;
         private Singleton () {}
         public static synchronized Singleton getInstance() {
             if (uniqueInstance == null) {
                  uniqueInstance = new Singleton();
             }
             return uniqueInstance;
         }
    }
    

    急切单件

    如果应用程序总是创建并使用单件实例,或者在创建和运行时方面的负担不太繁重时,可使用急切单件模式。

    public class Singleton {
         private static Singleton uniqueInstance = new Singleton();
         private Singleton () {}
         public static Singleton getInstance() {
             return uniqueInstance;
         }
    }
    

    双重检查枷锁单件

    利用双重检查枷锁,首先检查是否实例已经创建了,如果不存在,就进入同步区块。进入区块后,再检查一次,如果仍没有创建,才会创建实例。

    public class Singleton {
         private volatile static Singleton uniqueInstance;
         private Singleton () {}
         public static Singleton getInstance() {
             if (uniqueInstance == null) {
                  synchronized (Singleton.class) {
                       if (uniqueInstance == null) {
                           uniqueInstance = new Singleton();
                       }
                  }
             }
             return uniqueInstance;
         }
    }
    

    相关文章

      网友评论

          本文标题:单件模式(单利模式)

          本文链接:https://www.haomeiwen.com/subject/mllkwxtx.html