• 【单例模式】单例模式


    单例模式

    饿汉式(急切实例化)

    public class EagerSingleton {
    
        /** 1.私有化构造方法 */
        private EagerSingleton() {
        }
        
        /** 2.声明静态成员变量并赋初始值-类初始化的时候静态变量就被加载,因此叫做饿汉式 */
        public static EagerSingleton eagerSingleton=new EagerSingleton();
    
        /** 3.对外暴露公共的实例化方法 */
        public static EagerSingleton getInstance(){
            return eagerSingleton;
        }
        
    }

    懒汉式(延迟实例化)(DCL双重检测)

      -为什么要判断两次?  

        避免由于并发导致的线程安全问题

      -为什么要使用 volatile关键字修饰 ourInstance?

        避免指令重排序,同时保证变量ourInstance在线程之间是可见的

    public class LazySingleton {
    
        /** 1.私有化构造方法 */
        private LazySingleton() {
        }
    
        /** 2.声明静态变量 -这里声明为volatile,是禁止指令重排序 */
        private volatile static LazySingleton ourInstance;
    
        /** 3.对外暴露公共的实例化方法 */
        public static LazySingleton getInstance() {
    
            if (ourInstance == null) {
                synchronized (LazySingleton.class) {
                    if (ourInstance == null) {
                        ourInstance = new LazySingleton();
                    }
                }
            }
            return ourInstance;
        }
    
    }
  • 相关阅读:
    C++处理Json串——jsoncpp库
    古典文学--本经阴符七术
    古典文学--素书
    网络编程之getaddrinfo
    网络编程之addrinfo
    跳表数据结构
    MySQL 编译安装并且开启DEBUG模式
    volatile关键字详解
    istringstream、ostringstream、stringstream 类简介
    Selenium入门21 Select操作
  • 原文地址:https://www.cnblogs.com/july-sunny/p/11675012.html
Copyright © 2020-2023  润新知