在提到的针对双重检查锁定方案的无序写入的示例中(请参阅:
IBM article和Wikipedia Article)
我不明白为什么在完全初始化构造函数之前Thread1会从同步块(synchronized block)中出来的简单原因。根据我的理解,创建“new”和调用构造函数应按顺序执行,并且直到所有工作都未完成之前,才应释放同步锁。
请让我知道我在这里想念的东西。
最佳答案
构造函数可以完成-但这并不意味着该构造函数中涉及的所有写操作都已对其他线程可见。令人讨厌的情况是,在对象的内容变得可见之前,其他线程可以看到该引用(因此他们开始使用该引用)。
您可能会发现Bill Pugh's article on it也可以帮助您了解一些信息。
就我个人而言,我只是避免像瘟疫一样反复检查锁定,而不是试图使其全部正常工作。