/**
* DCL单例模式:在懒汉式套路的基础上加入并发控制,保证在多线程环境下,对外只存在一个对象
* 1、构造器私有化,避免外部new构造器
* 2、提供私有的静态属性,存储对象的地址
* 3、提供公共的静态方法,获取属性
* @author Jack
*
*/
public class DoubleCheckedLocking {
//1、构造器私有化
private DoubleCheckedLocking(){}
//2、提供私有的静态属性(懒汉式:没有直接new,而是调用方法的时候才创建)
//没有volatile其他线程可能访问到一个没有初始化的对象
private static volatile DoubleCheckedLocking instance;
//3、提供公共的静态方法
public static DoubleCheckedLocking getInstance(){
//避免不必要的同步
if(null!=instance){
return instance;
}
//加入synchronized保证了多线程环境下的单例
synchronized (DoubleCheckedLocking.class) {
if(null==instance){
//new:1、开辟空间 2、初始化对象信息 3、返回对象的地址给引用
instance = new DoubleCheckedLocking();
}
}
return instance;
}
/*public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(DoubleCheckedLocking.getInstance());
}
});
t.start();
System.out.println(DoubleCheckedLocking.getInstance());
}*/
}
多线程模式下的单例(DCL单例模式)
DCL单例模式详解
最新推荐文章于 2025-03-14 13:28:24 发布
本文详细介绍了DCL(Double Checked Locking)单例模式的实现原理与代码实践。通过私有构造器、静态属性及公共静态方法确保了在多线程环境下仅创建一个实例,同时利用volatile关键字和synchronized块解决了潜在的并发问题。
586

被折叠的 条评论
为什么被折叠?



