gpt4 book ai didi

java - 双重检查锁定 (DCL) 及其修复方法

转载 作者:行者123 更新时间:2023-11-29 08:32:04 26 4
gpt4 key购买 nike

我正在阅读 article关于双重检查锁定。讨论的问题如下:

public class MyFactory {
private static MyFactory instance;

public static synchronized MyFactory getInstance() {
if (instance == null)
instance = new MyFactory();
return instance;
}

private MyFactory() {}
}

如何在每次 getInstance() 调用时避免同步的建议方法之一是使用类加载器:

public class MyFactory {
private static final MyFactory instance;

static {
try {
instance = new MyFactory();
} catch (IOException e) {
throw new RuntimeException("Darn, an error's occurred!", e);
}
}

public static MyFactory getInstance() {
return instance;
}

private MyFactory() throws IOException {
// read configuration files...
}
}

作者说:“... JVM 确保在首次引用和加载类时只调用此静态初始化代码一次。”我完全同意。但我不明白以下内容:“使用类加载器通常是我处理惰性静态初始化的首选方式。”

第二个代码片段是惰性静态初始化吗?

最佳答案

这不是懒惰。这是惰性的(使用类加载器):

public class Singleton {

public static class SingletonHolder {
public static final Singleton HOLDER_INSTANCE = new Singleton();
}

public static Singleton getInstance() {
return SingletonHolder.HOLDER_INSTANCE;
}
}

关于java - 双重检查锁定 (DCL) 及其修复方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47130165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com