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

    单例模式

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

    单例模式分为两大类

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

    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关键字起的作用则是禁止指令重排,这样对它的写操作就会有一个内存屏障,这样,在他的赋值完成之前,不会调用读操作。

  • 相关阅读:
    JS连接数据库“实例”
    sql数据字典
    硬件防火墙的配置
    xxx
    rhs属性文件删除法
    思科pix防火墙配置实例大全
    SilverLight中的画刷小结
    数据库表间的连接总结
    导入Excel到Sql Server 2005 (转)
    关于Silverlight页面跳转的总结
  • 原文地址:https://www.cnblogs.com/mengzhao/p/10007992.html
Copyright © 2011-2022 走看看