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;
        }
        }
    }
  • 相关阅读:
    Jedis常用方法 java
    Redis的set、map、list、value、实体类java
    Spring RedisTemplate关闭坏连接
    linux启动vue
    Mybatis实现批量更新sql语句(SSM实现批量更新sql语句)
    mybatis执行批量更新batch update 的方法(oracle,mysql)
    【VM+win7】VM虚拟机安装win7系统教程https://blog.csdn.net/hyhui13/article/details/82682181
    【beyond compare 4】秘钥过期解决办法
    【laravel5】Carbon类
    【Redis+PHP】利用redis的zset实现游戏排行榜功能
  • 原文地址:https://www.cnblogs.com/lianghui66/p/5603006.html
Copyright © 2011-2022 走看看