手写单例模式

1. 静态内部类实现单例(线程安全、效率高)

一。静态内部类实现:这种方式是 Singleton 类被装载了, instance 不一定被初始化。因为 SingletonHolder 类没有被主动使用,只有通过显示调用 getInstance 方法时,才会显示装载 SingletonHolder 类,从而实例化 instance 。
注意内部类SingletonHolder要用static修饰且其中的静态变量INSTANCE必须是final的。

public class Singleton {  
    private static class SingletonHolder {  
    	private static final Singleton INSTANCE = new Singleton();  
    }  
    private Singleton (){}  
    public static final Singleton getInstance() {  
    	return SingletonHolder.INSTANCE;  
    }  
}  

2. 双重检查锁(线程安全、效率高)

二。双重检查锁:在JDK1.5之后,双重检查锁定才能够正常达到单例效果。(因为volitile关键字)
此种实现中不用每次需要获得锁,减少了获取锁和等待的事件。
注意volatile关键字的使用,保证了各线程对singleton静态实例域修改的可见性。

public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
	    if (singleton == null) {  
	        synchronized (Singleton.class) {  
		        if (singleton == null) {  
		            singleton = new Singleton();  
		        }  
			}  
    	}  
    	return singleton;  
	}  
}  

3. 参考:

  1. 用至少两种方式实现一个Singleton(单例模式)。
  2. Java面试必备:手写单例模式
  3. 设计模式:如何优雅地手写单例模式
  4. 单例模式的七种写法
  5. 手写单例模式,几种单例模式详解
  6. 手写单例,不心慌
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页