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;
        }
    }
  • 相关阅读:
    hadoop分布式搭建
    朴素贝叶斯算法
    python数组并集交集补集
    VMware Workstation下安装Linux
    决策树ID3算法
    微信小程序开发测试
    筛法求素数质数
    STL——heap结构及算法
    STL——序列式容器
    使用位图字体工具BMFont从图片生成自定义字体
  • 原文地址:https://www.cnblogs.com/amibandoufu/p/10759948.html
Copyright © 2011-2022 走看看