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;
        }
        }
    }
  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/lianghui66/p/5603006.html
Copyright © 2011-2022 走看看