zoukankan      html  css  js  c++  java
  • 手写单例模式

    /**
     * 单例模式
     * @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;
        }
    }

  • 相关阅读:
    js 获取和设置css3 属性值的实现方法
    API的自动化测试
    删除html标签或标签属性以及样式
    JS+CSS实现数字滚动
    video元素和audio元素相关事件
    SDT v0.0.1 上线
    safari浏览器fixed后,被软键盘遮盖的问题—【未解决】
    js中DOM事件探究
    使用Web存储API存取本地数据
    剑指offer(Java版)第七题:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead, 分别完成在队列尾部插入结点和在队列头部删除结点的功能。
  • 原文地址:https://www.cnblogs.com/gygx110/p/12085174.html
Copyright © 2011-2022 走看看