/**
 * @ClassName SingleDemo
 * @Description 多线程高并发下的单例模式
 * @Author 夕
 * @Date 2016-07-27 20:58
 * @Version V1.0
 **/
public class Singleton {

    // volatile关键字主要的作用是(保证变量在多线程中的可见性),当第一个线程创建了Singleton对象后,但是还没有走完,
    // Singleton就是对外可见的,后续再来的线程看到已经创建,就无需进入第一个判断中,直接返回Singleton对象
    private static volatile Singleton instance;

    //让构造函数私有化,这样该类就不会被实例化
    private Singleton(){

    }

    public static Singleton getIntance(){
        //第一个判断空,如果instince是空的,若同时有100个线程访问
        if(instance==null){
            //使用synchronized同步代码块,加锁,其中一个线程进入,其它线程等待
            synchronized (Singleton.class){
                if (instance==null){
                    instance = new Singleton();
                    //代码1
                    //代码2
                }
            }
        }
        return instance;
    }
}