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;
        }
    }
    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    2020软件工程个人作业06——软件工程实践总结作业
    git上传文件夹内容
    git常用命令(部分)
    java命令行输入参数
    2020软件工程作业05
    软件工程——问题清单
    2020软件工程作业04
    2020软件工程作业03
    2020软件工程作业02
    问题清单
  • 原文地址:https://www.cnblogs.com/walker993/p/9437650.html
Copyright © 2011-2022 走看看