单例模式的优化

import java.io.Serializable;

/**
 * 懒汉单例模式
 * 优化:
 * 1、使用synchronized防止多线程访问的安全问题
 * 2、使用volatitle保证变量的一致
 * 3、防止反射调用私有构造方法
 * 4、让单例可以序列化
 */
public class Singleton implements Serializable{

    private volatile static Singleton singleton=null;

    private Singleton(){
        //防止反射调用构造方法
        if(singleton!=null){
            throw new RuntimeException("该类是单例模式,已经被实例化");
        }
    }

    public static Singleton getInstance(){
        if(singleton==null){//防止对象已经实例化后又进行同步而影响性能,
            synchronized (Singleton.class){
                if(singleton==null){//防止多线程访问,重复实例化
                    singleton=new Singleton();
                }
            }
        }
        return singleton;
    }
}

猜你喜欢

转载自blog.csdn.net/oschina_41790905/article/details/80216055