【发布时间】:2014-01-19 12:58:02
【问题描述】:
@Service
public class InfoService {
private Info currentInfo;
public void initInfo(String data) {
currentInfo = new Info(data);
}
//blarblar...
}
如果这不是线程安全的,我的服务方法应该更改为将“currentInfo”作为其参数。 我不想制作重复的参数代码,所以我把它作为服务的成员变量。 当然,这段代码在我身上运行得很好,但我担心这可能会造成线程危险。
“currentInfo”可能是线程危险的?
【问题讨论】:
-
在我们担心它是线程安全之前,让我们先担心它的编译...
-
忽略这甚至不会编译,不知道使用模式或具体问题,这是不可能回答的。按原样,您的私有变量不是
volatile,因此就安全发布而言,这肯定不是“线程安全的”。我强烈建议拿起一份Java Concurrency in Practice -
我认为这取决于您的服务是否是单例的,如果它是单例的,那么多个线程可以访问 currentInfo 但它不是单例的,那么如果我错了,只有来自这个对象的线程使用这个变量来纠正我
标签: java spring thread-safety