不会产生性能问题,有启发。
public static Manager getInstance() {
if (inst != null) {
return inst;
}
synchronized (Manager.class) {
if (inst == null) {
inst = new Manager();
}
}
return inst;
}
另一种写法
public static Manager getInstance() {
if (instance == null) {
synchronized (obj) {
if (instance == null) {
instance = new Manager();
}
}
}
return instance;
}
有个专业词汇:
双检锁/双重校验锁(DCL,即 double-checked locking)
下面介绍一种双检锁的实现方式,这种方式看起来稍稍比较复杂了点,不过可以实现线程安全,同时双检锁的方式可以保证性能比较高
p
ublic class Singleton {
//定义private构造函数,使类不可以被实例
private Singleton (){}
private volatile static Singleton instance;
/**
* 双检锁/双重校验锁(DCL,即 double-checked locking)线程安全,懒加载
* @return
*/
public static Singleton getInstance(){
if(instance == null){
synchronized (Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}