public class dlcsingleton {
private static volatile dlcsingleton minstance =null; //volatile关键字是为了禁止编译器对 volatile关键字修饰的变量进行重排序,并保证volatile变量的读操作发生在写操作之后
private dlcsingleton(){
}
public static dlcsingleton getminstance(){
if(minstance == null){ //第一次检查
synchronized (dlcsingleton.class){ //同步代码块
if(minstance == null){ //第二次检查
minstance = new dlcsingleton();
}
}
}
return minstance;
}
dcl双重检查锁仅在真正创建minstance实例的时候加上了synchronized关键字。。。而且使用volatile关键字修饰,是为了禁止编译器对volatile变量重排序,并且保证volatile变量的读操作发生在写操作之后。