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;
        }
    }
  • 相关阅读:
    vmware-tools安装
    UBUNTU 安装教程
    CANO入门(三)
    CANOE入门(二)
    CANOE入门(一)
    ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock
    vmware-tools安装
    root权限
    ARM嵌入式开发中的GCC内联汇编__asm__
    OpenCV3.1.0+VS2015开发环境配置
  • 原文地址:https://www.cnblogs.com/amibandoufu/p/10759948.html
Copyright © 2011-2022 走看看