关于Singleton模式的double check实现方式

来源:百度知道 编辑:UC知道 时间:2024/06/06 12:47:09
为什么要2次检查uniqueInstance是不是为null?做了第一次检查后,为instance initialize的代码块不是已经在synchronized中了么?而instance也是private的,这样的话,难道instance的值initialize前还会变么?为什么还要再查一遍uniqueInstance是不是为null后initialize呢?

这个问题是这样的

如果两个线程同时发起

当为null时,其中一个线程创建示例,因为有同步的关系,另一个线程开始被阻塞,然后等示例创建完毕,第二个线程又创建了一个新的示例

也就有违初衷了

当然万事万物,特别是程序开发, 遵循good enough是比较重要的原则