写一个双检查的懒汉单例模式,双检查的目的是什么?
Posted 骇客与画家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写一个双检查的懒汉单例模式,双检查的目的是什么?相关的知识,希望对你有一定的参考价值。
为什么要有两个 if 判断?
答:第二个 if 判断用于拦截第一个获得对象锁线程以外的线程
public class Singleton {
private volatile static Singleton singleton;
private Singleton() {
}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
关于 Java 单例模式中双重校验锁的实现目的及原理[1]
第二个 if 判断能拦截第一个获得对象锁线程以外的线程
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getUniqueInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
这是懒汉模式下双重校验锁下的简单代码
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getUniqueInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
uniqueInstance = new Singleton();
}
}
return uniqueInstance;
}
}
懒汉模式下非双重校验锁下的简单代码
差别在于第二个 if 判断能拦截第一个获得对象锁线程以外的线程。
笔者顺便做了张思维导图截图,模板可能选得不好,还是要多练练哈。
参考资料
关于Java单例模式中双重校验锁的实现目的及原理: https://www.cnblogs.com/ALego/p/11448563.html
[2]https://www.cnblogs.com/ALego/p/11448563.html: https://www.cnblogs.com/ALego/p/11448563.html
以上是关于写一个双检查的懒汉单例模式,双检查的目的是什么?的主要内容,如果未能解决你的问题,请参考以下文章