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

     饿汉式实现(单例对象立即加载)

    public class SingletonDemo02 {
    private static /*final*/ SingletonDemo02 s = new SingletonDemo02();
    private SingletonDemo02(){} // 私有化构造器
    public static /*synchronized*/ SingletonDemo02 getInstance(){
    return s;
    }
    }
    public class Client {
    public static void main(String[] args) {
    SingletonDemo02 s = SingletonDemo02.getInstance();
    SingletonDemo02 s2 = SingletonDemo02.getInstance();
    System.out.println(s==s2); //结果为true
    }
    }


    • 饿汉式单例模式代码中,static变量会在类装载时初始化,此时也不会涉及多个线程对象访问该对象的问
    题。虚拟机保证只会装载一次该类,肯定不会发生并发访问的问题。因此,可以省略synchronized关键字。
    • 问题:如果只是加载本类,而不是要调用getInstance(),甚至永远没有调用,则会造成资源浪费!

    懒汉式实现(单例对象延迟加载)

    public class SingletonDemo01 {
    private static SingletonDemo01 s;
    private SingletonDemo01(){} // 私有化构造器
    public static synchronized SingletonDemo01 getInstance(){
    if(s==null){
    s = new SingletonDemo01();
    }
    return s;
    }
    }

     要点:
    – lazy load! 延迟加载, 懒加载! 真正用的时候才加载!
    • 问题:
    – 资源利用率高了。但是,每次调用getInstance()方法都要同步,并发
    效率较低。

  • 相关阅读:
    使用arcpy添加grb2数据到镶嵌数据集中
    使用python把gdb格式的文本文件转为utf-8的格式
    Spring Cloud
    windows 下nginx配置php支持
    nginx开启gzip
    ant design 修改tab样式
    使用arcpy替换工程文件中的栅格图层数据源异常
    cenos 安装hadoop
    失败
    linux挂载新硬盘
  • 原文地址:https://www.cnblogs.com/vieta/p/11161268.html
Copyright © 2011-2022 走看看