方法级单例实例是否安全?

Pre*_*eon 1 java singleton multithreading thread-safety

obj下面的操作是否安全?我知道方法级别的变量和实例会在每个线程的堆栈上发生 - 但我不确定当局部变量是单例时会发生什么.在webservice调用中调用foo().我很好奇这是否是线程安全的?

public void foo() {
    SomeObject obj = getSomeObject();  
    obj.doSomething();   // Would this be thread safe?
}

private SomeObject getSomeObject() {
    // returns singleton
    SpringContext.getBean("someObject");
}

class SomeObject {
    int x;
      ...

    // Not synchronized
    public void doSomething() {

    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

这取决于你对"线程安全"的意思.如果SomeObject.doSomething()以不安全的方式改变实例,那么不,它不安全.两个不同的线程可以获得对同一对象的引用.

基本上,除非SomeObject设计为同时从多个线程使用,否则不应将其设为单例.