分享一个volatile实现的双检锁单例模式

Posted 等待戈多儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一个volatile实现的双检锁单例模式相关的知识,希望对你有一定的参考价值。

/**
 * DCL(DubleCheckedLock)单例模式
 */
public class Singleton 
	private volatile static Singleton instance;
	public static Singleton getInstance() 
		if (instance == null) //锁细化
			synchronized (Singleton.class) 
				if (instance == null) //多线程环境下还需要再次判空
					instance = new Singleton();
				
			
		
		return instance;
	


volatile关键字的作用是禁止指令重排序优化。


分享一个介于牛A和牛C之间的单例模式,秒杀其他一切单例模式:

public enum EasySingleton 
	INSTANCE;

通过EasySingleton.INSTANCE访问,线程安全而且还能防止反序列化导致重新创建新的对象。

不禁感叹,Java原来也可以如此优美!


以上是关于分享一个volatile实现的双检锁单例模式的主要内容,如果未能解决你的问题,请参考以下文章

如何实现一个单例模式 c#双重锁检查

双重检查锁单例模式为什么要用volatile关键字?

单例模式-双检锁就稳了?

Java 设计模式 -- 单例模式的实现(饿汉式枚举饿汉式懒汉式双检锁懒汉式内部类懒汉式)jdk 中用到单例模式的场景DCL实现单例需用volatile 修饰静态变量

Java 设计模式 -- 单例模式的实现(饿汉式枚举饿汉式懒汉式双检锁懒汉式内部类懒汉式)jdk 中用到单例模式的场景DCL实现单例需用volatile 修饰静态变量

单例模式(懒汉模式-双检锁饿汉模式静态内部类模式)-详细