import sun.security.provider.MD2;
/*
懒汉式加入并发,保证对外只有一个
1.构造器私有化-->避免外部new
2.提供私有静态属性 --> 存储对象地址
3.提供公共静态方法-->获取属性
*/
public class MyDCL {
// 2.提供私有静态属性 --> 存储对象地址
private static volatile MyDCL instance;
// 1.构造器私有化-->避免外部new
private MyDCL(){
}
public static MyDCL getInstance(long time){
//再次检测,防止A进来时,BCD在等
if(null != instance){
return instance;
}
synchronized (MyDCL.class){//锁定
if(null == instance){
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
instance = new MyDCL();
//1.开辟空间 2.初始化信息 3.返回对象地址给引用 可能存在指令重排,导致访问的是没有初始化的对象,只要加上volatile
}
}
return instance;
}
//对照
public static MyDCL getInstance1(long t
单例模式DCL写法以及测试
最新推荐文章于 2024-06-14 11:21:01 发布