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;
        }
    }
  • 相关阅读:
    完整的WSDL语法
    WSDL UDDI
    八一八 The Social Network的小细节
    MySQL命令行常用命令
    AspectJ风格的Aop切点表达式
    强大的Mockito测试框架
    MySQL锁定状态查看命令
    Yum本地Rpm库设置
    Sed实例大全
    为何 Emacs 和 Vim 被称为两大神器
  • 原文地址:https://www.cnblogs.com/amibandoufu/p/10759948.html
Copyright © 2011-2022 走看看