gpt4 book ai didi

java - 双重检查锁定,NetBeans 让我感到困惑?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:45 25 4
gpt4 key购买 nike

我有一个关于双重检查锁定的问题。考虑这个例子:

public class Singleton {

private static volatile Singleton instance = null;

public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance ;
}
}

据我了解,上面的代码是创建单例类的正确方法。

但是,NetBeans 希望我删除外部 if 语句,所以它看起来像这样:

public class Singleton {

private static volatile Singleton instance = null;

public static Singleton getInstance() {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
return instance ;
}
}

这两个片段之间的唯一区别是,在第二个示例中,代码总是会进入同步块(synchronized block),而在第一个示例中则不会。为什么我要听 NetBeans 并删除外部 if 语句?最好避免锁定。

最佳答案

NetBeans 的自动提示系统显然不知道可以像您所做的那样使用 volatile 正确地进行双重检查锁定,因此它建议使用完全锁定。安全总比后悔好。但在这种情况下,您是对的,而不是 NetBeans。

关于java - 双重检查锁定,NetBeans 让我感到困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413076/

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