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;
        }
    }
    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    flask 本地局域网连接
    python
    Python 有关网址
    Python 字典(Dictionary)操作详解
    Elasticsearch集成HanLP分词器-个人学习
    知识图谱构建
    项目实战:如何构建知识图谱
    10分钟上手图数据库Neo4j
    知识图谱技术原理介绍
    知识图谱的应用
  • 原文地址:https://www.cnblogs.com/walker993/p/9437650.html
Copyright © 2011-2022 走看看