关于LazySingleton防反射攻击的一个小疑问?
来源:8-7 单例设计模式-反射攻击解决方案及原理分析
LBruce
2019-02-25
private LazySingleton() {
if (lazySingleton != null) {
throw new RuntimeException("已经存在...");
}
}
2个线程,一个反射的线程,一个获取单例的线程。为什么反射线程先实例化对象的话,这个单例就不止一个对象了?打过断点,反射线程在先,获取单例线程在后的话,2次进入构造函数时if(lazySingleton != null)的判断都是false,为什么?谢谢解答。
写回答
1回答
-
亲爱的同学,你好,我是geely老师的助教。
这个是因为两个线程没有做互斥,反射是直接调用构造函数,但是在构造函数里面可以多线程访问,所以会造成可以创建多个实例的情况。
012019-02-25
相似问题