最近、Java の二重チェック ロック パターンとその落とし穴について説明している記事を偶然目にしました。今、私が何年も使用しているそのパターンの変形が問題の影響を受けやすいかどうか疑問に思っています。
この件に関する多くの投稿や記事を見て、部分的に構築されたオブジェクトへの参照を取得する際の潜在的な問題を理解しました。私が知る限り、私の実装はこれらの問題の影響を受けるとは思いません. 次のパターンに問題はありますか?
もしそうでなければ、なぜ人々はそれを使わないのでしょうか? この問題に関して私が見たどの議論でも、それが推奨されているのを見たことがありません。
public class Test {
private static Test instance;
private static boolean initialized = false;
public static Test getInstance() {
if (!initialized) {
synchronized (Test.class) {
if (!initialized) {
instance = new Test();
initialized = true;
}
}
}
return instance;
}
}