单例方法线程安全

Tar*_*viv 0 java singleton multithreading design-patterns

我有一个问题Singleton模式和线程.实施是这样的.

public class Singleton {
    private static final Singleton instance = new Singleton();

    private SomeClass someField;
    // and  another private fields

    private Singleton() {
        someField = new SomeClass(some args);
        // init another private fields
    }

    public Singleton getInstance() {
        return instance;
    }

    public void operation() {
        //some operations
        someField.method();
    }
}
Run Code Online (Sandbox Code Playgroud)

(对不起,我不能提供真实的例子.)接下来的问题是:方法操作()线程是否安全?

Jon*_*eet 5

我们不知道它是否安全 - 我们不知道它是什么someField.method().

我强烈建议你创建someField一个final字段,就像单例需要改变状态一样,如果没有额外的同步,它肯定不是线程安全的.如果SomeClass它本身是不可变的和线程安全的,那么你不应该需要任何其他的同步 - 但是否则,你会.

基本上,关于单身人士并没有什么"神奇的线程安全".它只是一个单个实例,多个线程可以通过静态getInstance()方法访问它.如果类是线程安全的,那么它是线程安全的,无论它是否是单例 - 如果它不是线程安全的,那么使它成为单例也不会有任何帮助.