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;
        }
        }
    }
  • 相关阅读:
    GDI+ 支持的图片文件格式
    Linux学习-灾难复原的考虑
    Linux学习-备份策略
    Linux学习-备份的种类、频率与工具的选择
    Linux学习-备份要点
    Linux学习-服务器硬件数据的收集
    Linux学习-系统基本设定
    Linux学习-开机过程的问题解决
    Linux学习-Boot Loader: Grub2
    Linux学习-核心与核心模块
  • 原文地址:https://www.cnblogs.com/lianghui66/p/5603006.html
Copyright © 2011-2022 走看看