静态内部类实现的单例模式为什么就是线程安全的
来源:8-3 单例设计模式-DoubleCheck双重检查实战及原理解析
慕田峪7236616
2018-11-20
不理解的是为什么静态内部类单例初始化时jvm加锁,而前一节视频中同样是多个线程初始化对象时就不加锁?
写回答
1回答
-
我的理解是:因为静态内部类初始化时加的是类锁,锁住的是整个类,然后在这个阶段初始化对象,只有一个线程能获得这个类锁,对象初始化的指令重排序也就无关紧要了。而前一个视频是直接new一个单例实例,是初始化对象,这个阶段jvm不加锁。
对于为什么类初始化加锁,对象初始化不加锁?大概是类初始化要做的工作很多,而且只初始化一次,但对象初始化次数会很多,如果每次对象初始化都加锁,消耗会很大。
412018-12-09
相似问题