为了账号安全,请及时绑定邮箱和手机立即绑定

DCL双重检查锁为什么需要两层判断?

DCL双重检查锁为什么需要两层判断?

梦里花落0921 2019-01-18 11:16:03
我们知道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之后不再触发加锁操作。

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 1059 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信