public class Singleton {
private Singleton singleton;
public Singleton getInstance() {
//这句是提高效率,没必要每次都去加锁,加锁是很费时间的。
if (this.singleton == null) {
//加锁防止高并发,很多线程已经冲进这里 A点
synchronized (Singleton.class) {
/*一个人线程已经将线程创建了,但很多线程还在A点,所以为了防止再次
创建,需要再次判断。*/
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
可以看到懒汉式需要加锁操作,而且代码也比饿汉式麻烦,只是它会在使用时才创建对象,会节约一点内存。但也没太大必要,所以建议使用饿汉式,简单方便。
单例模式的懒汉式双重检查有可能在面试中考到。