• 手写单例模式


    /**
     * 单例模式
     * @author gy2018
     *
     */
    public class SingletonDemo {
        /**
         * 所谓的单例模式,就是整个程序有且仅有一个实例。
         * 该类负责创建自己的对象 并确保只有一个对象被创建。
         * 在java中,一般常用在工具类的实现或创建对象 需要消耗资源
         *
         * 特点:
         * 类构造器私有
         * 持有自己类型的属性
         * 对外提供获取实例的静态方法
         */
        
        
        /**
         * 饿汉模式
         * 线程安全,比较常用,但是一开始就初始化,容易产生垃圾
         */
    //    //创建私有静态的对象
    //    private static SingletonDemo singletonDemo = new SingletonDemo();
    //    //私有构造器
    //    private SingletonDemo(){};
    //    //提供一个共有可调用的方法获取实例
    //    public static SingletonDemo getSingletonDemo(){
    //        return singletonDemo;
    //    }
        
        /**
         * 懒汉模式
         * 线程不安全,延迟初始化,严格意义上来讲不是单例模式
         */
    //    private static SingletonDemo instance;
    //    private SingletonDemo(){};
    //    public static SingletonDemo getInstance(){
    //        if(instance == null){
    //            instance = new SingletonDemo();
    //        }
    //        return instance;
    //    }
        
        /**
         * 双重锁的单例模式,安全且在多线程情况下能保持高性能
         * 进行了两次判断,避免了不要的实例,第二次是为了同步,避免多线程问题。
         * 由于instance = new SingletonDemo()对象的创建在JVM中可能会进行重排序,
         * 在多线程访问下存在风险,使用volatile修饰instance实例变量有效,解决该问题。
         */
        private static SingletonDemo instance;
        private SingletonDemo(){};
        public static SingletonDemo getInstance(){
            if(instance == null){
                synchronized (SingletonDemo.class) {
                    if(instance == null){
                        instance = new SingletonDemo();
                    }
                }
            }
            return instance;
        }
    }

  • 相关阅读:
    python读写操作(txt, mat, xls, etc文件)
    开发linux版QQ就是支持未来的国产操作系统
    为知笔记linux绿色版的快速调用
    数学物理中的常见误区
    markdown语法小结
    信息爆炸时代的知识获取
    matlab: 数据的读写
    APS期刊投稿准备: REVTex格式
    markdown基本语法
    常见的数学关系
  • 原文地址:https://www.cnblogs.com/gygx110/p/12085174.html
Copyright © 2020-2023  润新知