• 设计模式之单例模式


    单例模式

    简单来说,就是一个类只能有一个实例,并且在项目中都能访问这个实例。

    单例模式分为两大类

    • 懒汉模式:实例在第一次使用时就创建
    • 饿汉模式:实例在类装载时才被创建

    1. 饿汉模式

    • ‘ 饿汉模式 ’ 的代码如下
    class Singleton {
    	private static Singleton instance = new Singleton();
    	private Singleton(){}
    	public static Singleton getInstance() {
    		return instance;
    	}
    }
    
    1.2 由于instance的初始化是在类加载时进行的,类加载是由classloader实现的,如果初始化太早,容易造成资源浪费。

    2. 懒汉模式

    • ‘ 懒汉模式 ’ 的代码如下
    class Singleton {
    	private static volatile Singleton instance = null;
    	private Singleton(){}
    
    	public static Singleton getInstance() {
    		if(instance == null){
    			synchronized (Singleton.class) {
    				if(instance == null)
    				instance = new Singleton();
    			}
    		}
    		return instance;
    	}
    }
    
    • 这种方法每次在获取instance之前先进行判断,如果instance为空的话,就new一个出来,否则就返回之前已存在的instance。

    • 该方法虽然有些复杂,其中有两次的 if(instance == null) 判断,第一个解决了多线程时等待的效率问题,第二个则防止可能出现多个实例的情况,而volatile关键字起的作用则是禁止指令重排,这样对它的写操作就会有一个内存屏障,这样,在他的赋值完成之前,不会调用读操作。

  • 相关阅读:
    数据库设计Step by Step篇目整理及下载地址
    SQL puzzles and answers读书笔记——预算执行问题
    MongoDB快速入门——SQL与MongoDB的对照
    C语言中的atan和atan2
    FTP命令
    vueelementadmin前端跨域问题解决
    回归
    学习kvm(一)
    利用spicevdagent实现文本拷贝、鼠标非陷入
    政策转向确立,降准只是开始
  • 原文地址:https://www.cnblogs.com/mengzhao/p/10007992.html
Copyright © 2020-2023  润新知