静态内部类实现的单例模式为什么就是线程安全的

来源:8-3 单例设计模式-DoubleCheck双重检查实战及原理解析

慕田峪7236616

2018-11-20

不理解的是为什么静态内部类单例初始化时jvm加锁,而前一节视频中同样是多个线程初始化对象时就不加锁?

写回答

1回答

qq_夕虞_0

2018-11-27

我的理解是:因为静态内部类初始化时加的是类锁,锁住的是整个类,然后在这个阶段初始化对象,只有一个线程能获得这个类锁,对象初始化的指令重排序也就无关紧要了。而前一个视频是直接new一个单例实例,是初始化对象,这个阶段jvm不加锁。

对于为什么类初始化加锁,对象初始化不加锁?大概是类初始化要做的工作很多,而且只初始化一次,但对象初始化次数会很多,如果每次对象初始化都加锁,消耗会很大。

4
1
Geely
赞赞赞
2018-12-09
共1条回复

Java设计模式精讲-Debug方式+内存分析

系统学习设计原则,设计模式,锤炼编码内功,赢取高薪Offer

3430 学习 · 407 问题

查看课程