天天看点

JAVA设计模式之懒汉式线程安全DCL双重检查锁

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变量的读操作发生在写操作之后。