zoukankan      html  css  js  c++  java
  • 单例模式写法

    第一种(懒汉,线程不安全):
    public class Singleton {
        private static Singleton instance;
        private Singleton (){}
     
        public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
        }
    }
     
    第二种(懒汉,线程安全):
    public class Singleton {
        private static Singleton instance;
        private Singleton (){}
        public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
        }
    }
     
    第三种(饿汉):
    public class Singleton {
        private static Singleton instance = new Singleton();
        private Singleton (){}
        public static Singleton getInstance() {
        return instance;
        }
    }
     
    第四种(饿汉,变种):
    public class Singleton {
        private Singleton instance = null;
        static {
        instance = new Singleton();
        }
        private Singleton (){}
        public static Singleton getInstance() {
        return this.instance;
        }
    }
     
    第五种(普通DCL):
    public class Singleton {
        private static Singleton singleton;
        private Singleton (){}
        public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
            if (singleton == null) {
                singleton = new Singleton();
            }
            }
        }
        return singleton;
        }
    }
     
    第六种(DCL):
    public class Singleton {
        private volatile static Singleton singleton;
        private Singleton (){}
        public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
            if (singleton == null) {
                singleton = new Singleton();
            }
            }
        }
        return singleton;
        }
    }
     
    第七种(DCL):
    public class Singleton {
        private static Singleton singleton;
        private Singleton (){}
        public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
            if (singleton == null) {
                Singleton tmp = new Singleton();
                singleton = tmp;
            }
            }
        }
        return singleton;
        }
    }
     
    第八种:
    public class Singleton {
     
        private static class SingletonHolder{
              static final Singleton INSTANCE = new Singleton();
         }
     
        public static Singleton getSingleton() {
             return SingletomHolder.INSTANCE;
        }
        }
    }
  • 相关阅读:
    2017年5月24日 HTML 基础知识(二)
    2017年5月22日 HTML基础知识(一)
    尼采语录
    Unicode字符串和整数和浮点数
    转义字符
    python第一节
    C# ASP .NET WEB方向和WPF方向,我该如何去选择
    ORA-06550:line 1,column 7;PLS-00201:indentifer '存储过程' must be declared;...PL/SQL Statement ignored 问题
    C# WPF打印报表
    Sql Server 自定义数据类型
  • 原文地址:https://www.cnblogs.com/lianghui66/p/5603006.html
Copyright © 2011-2022 走看看