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

    定义 确保一个类只有一个实例,并提供一个全局访问点。
    延迟实例化

    public class Singleton {
    	private static Singleton instance;
    
    	private Singleton() { //构造函数私有化;
    	};
    
    	public static Singleton getInstatnce() { //全局访问点;
    		if (instance == null) {
    			instance = new Singleton();
    		}
    		return instance;
    	}
    }
    
    

    注意对于多线程可能存在同时创建出多个实例出来,
    延迟实例化的改进

    
    public class Singleton {
    	private static Singleton instance;
    
    	private Singleton() { //构造函数私有化;
    	};
    
    
    //加入synchronized进行同步,但是性能会下降;
    	public static synchronized Singleton getInstatnce() { //全局访问点;
    		if (instance == null) {
    			instance = new Singleton();
    		}
    		return instance;
    	}
    }
    
    

    不延迟

    //JVM加载这个类的时候就创建实例;
    public class Singleton {
    	private static Singleton instance =  new Singleton();
    
    	private Singleton() { //构造函数私有化;
    	};
    
    	public static synchronized Singleton getInstatnce() { //全局访问点;
    	
    		return instance;
    	}
    }
    
    

    双重检查加锁

    
    public class Singleton {
    	private volatile static Singleton instance ;
    
    	private Singleton() { //构造函数私有化;
    	};
    
    	public static  Singleton getInstatnce() { //全局访问点;
    	
    		if(instance==null) {
    			synchronized(Singleton.class){ //实例化的时候才加锁;
    				instance = new Singleton();
    			}
    		}
    		return instance;
    	}
    }
    
    
    多思考,多尝试。
  • 相关阅读:
    Zookeeper 基础知识【1】
    Spark 基础复习【1】
    ZooKeeper 入门 一致性
    Hive 视图 索引
    Yarn调度 历史与基础
    mysql 优化【1】
    TCP IP知识梳理
    Java 基础 锁
    Spark 累加器使用
    RATE-MAX----beta答辩博客
  • 原文地址:https://www.cnblogs.com/LynnMin/p/9449934.html
Copyright © 2011-2022 走看看