Java 懒汉单例模式
class Singleton{ //volatile关键字禁止指令重排 private volatile static Singleton instance; private Singleton(){} public Singleton getInstance(){ if(instance==null){ //对.class加锁,获得的是所有类对象的锁 synchronized (Singleton.class){ //双重检查,防止多个线程同时进入第一层检查(因单例模式只允许存在一个对象,故在创建对象之前无引用指向对象,所有线程均可进入第一层检查) //当某一线程获得锁创建一个Singleton对象时,即已有引用指向对象,singleton不为空,从而保证只会创建一个对象 //假设没有第二层检查,那么第一个线程创建完对象释放锁后,后面进入对象也会创建对象,会产生多个对象 if(instance==null){ //singleton=new Singleton语句为非原子性,实际上会执行以下内容: //(1)在堆上开辟空间;(2)属性初始化;(3)引用指向对象 //volatile关键字可保证singleton=new Singleton()语句执行顺序为123,引用指向对象时一定有对象了 } } } return instance; } }
饿汉式就是直接new出来

浙公网安备 33010602011771号