• 单例模式写法


    第一种(懒汉,线程不安全):
    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;
        }
        }
    }
  • 相关阅读:
    Java第三季
    LeetCode(10)Regular Expression Matching
    LeetCode(9)Palindrome Number
    shell基础编程
    LeetCode(8)String to Integer (atoi)
    使用python绘制词云
    我的书单
    LeetCode(7)Reverse Integer
    获取新浪微博的Access_token
    c语言中,常见数据类型的字节数
  • 原文地址:https://www.cnblogs.com/lianghui66/p/5603006.html
Copyright © 2020-2023  润新知