gpt4 book ai didi

java - 从非线程安全方法初始化静态 Java 常量

转载 作者:行者123 更新时间:2023-11-30 06:15:25 25 4
gpt4 key购买 nike

让类定义如下

  public static class Bootstrapper {

public static final Object DEFAULT_VALUE = getDefaultValue();

private static Object getDefaultValue() {
if (DEFAULT_VALUE == null) {
return createValue(); // Not thread safe
}
return DEFAULT_VALUE;
}
}

其中 createValue() 方法不引用 DEFAULT_VALUE 字段,仅在 Bootstrapper 类的构造函数中调用并且是不是线程安全的。

上面的代码有什么问题(除了编程风格之外)吗?考虑到类初始化规则,线程安全大概不是问题,但程序员需要注意的重要事项是什么?

最佳答案

正如 Augusto 所解释的,您的代码是线程安全的。但是比较绕。简单地执行此操作在功能上是等效的,效率稍高,并且更清晰:

   public static class Bootstrapper {    
private static final Object DEFAULT_VALUE = createValue();

public static Object getDefaultValue() {
return DEFAULT_VALUE;
}
}

编辑:我还注意到该字段是公开的,而 setter/getter 是私有(private)的。这可能应该是相反的。

关于java - 从非线程安全方法初始化静态 Java 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865417/

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