zoukankan      html  css  js  c++  java
  • 单例模式的实现

    实现过程中需要考虑线程安全

    1. 使用同步

    public class Singleton{
        private static Singleton instance = null;
        private Singleton(){}
        public Singleton getInstance(){
            if(instance == null){
                initInstance();
            }
            return instance;
        }
        private static synchronized void initInstance(){
            if(instance == null){
                instance = new Singleton();
            }
        }
    }

    2. 使用静态内部类

    public class Singleton{
        private Singleton(){}
    
        private static class SingletonIns{
            private static Singleton instance = new Singleton();
        }
        public Singleton getInstance(){
            return SingletonIns.instance;
        }
    }

      实现懒加载:虚拟机加载机制介绍了触发类初始化的时机,其中一项是读取或设置一个类型的静态字段时触发该类加载,即 getInstance() 方法中的 return SingletonIns.instance ,调用这个方法才会触发类加载。

      实现单例:JVM保证类的<clinit>()方法在多线程下会被正确的加锁,而初始化方法,就是对静态变量的赋值和静态语句块中的语句,这里就是 instance = new Singleton() 这个操作。

    3. 使用枚举类

    public class Singleton{}
    
    public enum SingletonEnum{
        INSTANCE;
        private Singleton instance;
        private SingletonEnum() {
            instance = new Singleton();
        }
        public Singleton getInstance() {
          return instance;
        }
    }
    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    hadoop SecondNamenode 详解
    LaTeX的图片插入及排版[转]
    Secondary Namenode
    分布式文件系统元数据服务模型【转】
    Linux查看物理CPU个数、核数、逻辑CPU个数
    TCP的滑动窗口机制【转】
    sysctl.conf
    Iperf[转]
    CVE-2017-11882漏洞利用
    2017EIS CTFwriteup
  • 原文地址:https://www.cnblogs.com/walker993/p/9437650.html
Copyright © 2011-2022 走看看