访问Java Singleton私有成员的正确方法

hoo*_*dfx 2 java singleton

如果您有一个如下所示的Java Singleton:

public class MySingleton {

private static MySingleton instance;

private int member;

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

private MySingleton(){
    //empty private constructor
}

public int getMemberA(){
    return member;
}

public int getMemberB(){
    return instance.member;
}

}
Run Code Online (Sandbox Code Playgroud)

... getMemberA和getMemberB之间有区别吗?也就是说,访问会员instance.xxx和刚刚之间存在差异xxx吗?

注意:我知道使用Singleton模式的优缺点!

Jon*_*eet 10

是的,有区别.

你的单例实现当前不是线程安全的,这意味着可以调用getMemberB()一个实例而不是引用的实例instance,此时你将获得不同的结果.

如果你的实现是线程安全的(所以真的只能创建一个实例)那么它们就是等价的,更简单的形式会更受欢迎.