还有一种方式:用双重检查枷锁,在getInstance()中减少使用同步
public class Singleton{ private volatile static Singleton instance; private Singleton(){} public static Singleton getInstance(){ if(instance==null){ synchronized(Singletion.class){ if(instance == null){ instance = new Singleton(); } } } return instance; } }
volatile关键词确保:当instance变量被初始化成Singletion实例时,多个线程正确地处理instance变量,因为它会强制变量去对应内存中共享的变量