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

    1、常规的懒汉式,单例

    在多线程中的单例模式,

    好处:好理解吧。

    坏处:会被反射破坏单例。

    public class Singleton {
        //这里的volatile,可以确保初始化完singleton后,第一时间同步到主存,如果去掉volatile,则可能线程1,在synchronized中初始完成,但是synchronized块还未结束,那么就不会刷新到主存中。
        // 这里当后面的线程运行到外层if时,就还是需要等待锁
        private volatile static Singleton singleton;
    
        private Singleton() {}
    
        //需要加双重判断
        public static Singleton getInstence() {
            if(singleton == null) {//第一重判断,是否初始化,如果去掉,则每次都要等待锁
                synchronized (Singleton.class) {//加同步关键字,可以确保到大括号里的只有一个线程获取到锁,进行初始化
                    if(singleton == null ) {//第二重判断。为了避免前一个线程已经初始化,在进到外层if时没初始化,但是在本线程获取到锁时已经完成初始化,这里的singleton,就不为空了。
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;
        }
    }

    2、使用枚举来实现单例模式

    enum  aa {
        Singleton("singleton");
    
        private String name;
        private aa (String str) {
            this.name = str;
        }
    }
  • 相关阅读:
    Vue's Demo
    安装informatic过程中的错误
    linux系统字符集
    netstat
    查看linux系统的信息
    以太坊私有链的搭建
    $0 $1
    WordPaster-Joomla_3.4.7-tinymce 4.1.7示例发布
    Joomla3x-CKEditor4x-WordPaster整合示例
    Firefox 43无法安装xpi的问题
  • 原文地址:https://www.cnblogs.com/amibandoufu/p/10759948.html
Copyright © 2011-2022 走看看