gpt4 book ai didi

Java:如何对数组元素进行双重检查锁定?

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

这是我的代码目前的样子:

private boolean[] isInitialized = new boolean[COUNT];

private void ensureInitialized(int i) {
if (! isInitialized[i]) {
initialize(i);
isInitialized[i] = true;
}
}

现在我想让它线程安全。我知道 Java 中的双重检查锁定是“teh 3vilness!!1”,但由于可能会经常调用 ensureInitialized,所以我不希望它同步。所以我正在考虑这样做:

private boolean[] isInitialized = new boolean[COUNT];

private void ensureInitialized(int i) {
if (! isInitialized[i]) {
synchronized (this) {
if (! isInitialized[i]) {
initialize(i);
isInitialized[i] = true;
}
}
}
}

现在我该怎么做才能使这个真正的线程安全?
一些子问题:

  • 没有必要让 isInitialized 变易变,因为变量没有改变,对吧?
  • 数组元素改变了,我怎样才能使它们变易变?
  • 通常有更好的方法来做到这一点吗?

(另请注意,这是一个实例方法,因此静态初始化程序将不起作用)

最佳答案

您也可以考虑使用 Suppliers.memoize(Supplier<T> delegate)来自 guava library .

关于Java:如何对数组元素进行双重检查锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3897202/

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