我正在阅读这篇关于“双重检查锁定”的文章,并且在文章的主题之外,我想知道为什么在文章的某些地方作者使用了下一个成语:
清单 7. 尝试解决乱序写入问题
public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { //1 Singleton inst = instance; //2 if (inst == null) { synchronized(Singleton.class) { //3 inst = new Singleton(); //4 } instance = inst; //5 } } } return instance; }
我的问题是:有什么理由用同一个锁同步两次代码吗?这有什么目的吗?
提前谢谢了。