gpt4 book ai didi

java - 线程安全延迟加载静态 map

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

我正在尝试以线程安全的方式延迟初始化 map 。我在 initialization-on-demand holder idiom 之后想到了这个:

private static class NameIndexMapHolder {
private static final Map<String, Long> NAME_INDEX_MAP;
static {
Map<String, Long> map = new HashMap<>();
map.put("John", 3424534643);
map.put("Jane", 4328759749);
NAME_INDEX_MAP = Collections.unmodifiableMap(map);
}
}

public static Map<String, Long> getNameIndexMap() {
return NameIndexMapHolder.NAME_INDEX_MAP;
}

这个有用吗?它是线程安全的吗?从我读过的内容来看,这仅适用于单例。我读过的唯一其他选择是双重检查锁定,它似乎有其自身的问题。

最佳答案

静态 block 保证以线程安全的方式初始化。单例只是一个用例。您的代码完全是线程安全的。 See this discussion for more details.

然而,您的初始化只是伪惰性(我自己编造的术语)。直到在您的代码中引用类(由 JVM 进行惰性类初始化),类才会被初始化,但是您的 map 在技术上会立即初始化(当类被首次访问时)。 See this discussion for more information on class loading.

关于java - 线程安全延迟加载静态 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40059666/

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