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

    模式:懒汉模式、饿汉模式

    经常用的单例模式写法:双重校验-基于懒汉模式

    还有登记方式和枚举不讲

    懒汉模式:我很懒,你什么时候用到我,我就初始化一个唯一的实例给你用,如果你不用到我,我就步实例化一个唯一实例给你了,你用我就做,你不用,我就不做,就是这么懒(你拿鞭子抽我啊!)。

    public class lazySingleton {
        private static lazySingleton singleton;
        private lazySingleton(){};
        public static lazySingleton getInstance(){
            if (singleton==null){
                singleton = new lazySingleton();
            }
            return singleton;
        }
    }
    

      懒汉模式(上面代码):线程不安全,线程A判断singleton==null后还没有创建对象,线程B判断singleton==null,这时线程A没有创建对象,所以线程B会再次执行new操作,就会出现2个对象,不符合单例的唯一。

      这时候可以通过synchronization装饰getInstance(),可以解决线程不安全问题,但会影响性能。

    饿汉模式(静态初始化):我真的很饿,管你用不用,我先实例化出来,先看到我才放心(哪怕画饼充饥也好)。

    public class hungrySingleton {
        private static hungrySingleton singleton = new hungrySingleton();
        private hungrySingleton(){};
        public static hungrySingleton getInstance(){
            return singleton;
        }
    }
    

      饿汉模式(上面代码):线程安全,但是因为是static的所以编译时,就已经在内存中占用空间。

    双重校验-基于懒汉模式:针对上面线程不安全的问题,给出的解决方法。

    public class doubleCheckSingleton {
        private static doubleCheckSingleton singleton;
        private doubleCheckSingleton(){};
        public static doubleCheckSingleton getInstance(){
            if (singleton==null){
                synchronized (doubleCheckSingleton.class){
                    if (singleton==null){
                        singleton = new doubleCheckSingleton();
                    }
                }
            }
            return singleton;
        }
    }
    

      以上单例都重写了默认构造函数,修饰符为private,防止通过new来创建单例对象。

  • 相关阅读:
    spark代码的提交
    单位局域网内的vmware的网络配置
    hive安装配置
    sparkshell中执行wordcount
    解决 在IDEA中使用Maven和Scala新建项目没有自动产生src 以及spark的编译运行配置
    IIS环境下MHT文件预览时弹出下载框的问题解决
    MySql解压版使用
    Oracle 11g OEM登录后提示“出现内部错误”
    如何杀掉(kill)Oracle中的会话(Session)
    IIS发布后出现“如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题”错误
  • 原文地址:https://www.cnblogs.com/y-z-x/p/9059061.html
Copyright © 2011-2022 走看看