我们知道DCL双重锁的写法是:
if (null == singletonLazy) {
synchronized (SingletonLazy5.class) {
if(null == singletonLazy) {
singletonLazy = new SingletonLazy5();
}
}
}
那么为什么有两层判断呢?写成下面这样有哪些缺点呢?
synchronized (SingletonLazy5.class) {
if(null == singletonLazy) {
singletonLazy = new SingletonLazy5();
}
}
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
因为一旦singletonLazy被正确初始化以后,每次访问null == singletonLazy
一定能够得到false
从而不会重新初始化。但是我们无需每次都通过上锁来判断null == singletonLazy
。所以双重锁的目的是为了成功初始化singletonLazy之后不再触发加锁操作。
添加回答
举报
0/150
提交
取消