线程下面对obj的操作是否安全?我知道方法级变量和实例在每个线程的堆栈上 - 但我不确定当局部变量是单例时会发生什么。 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() {
}
}
最佳答案
这取决于你所说的“线程安全”是什么意思。如果 SomeObject.doSomething()
以不安全的方式改变实例,那么不,它不安全。两个不同的线程可以获得对同一对象的引用。
基本上,除非 SomeObject
被设计为同时从多个线程使用,否则您不应该将其设为单例。
关于java - 方法级单例实例线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12287478/