我有一个singleton Spring bean(默认范围)。所以,一个实例将被多个线程使用。然而,我对线程安全性有点困惑,显然所有的Spring bean都是线程安全的,如果它们是无状态的,但我的bean不是无状态的,它有各种实例变量,每个请求/其他控制器/类使用不同的实例变量。Spring MVC单线程安全?
这是我的单身豆的开头:
public class PcrfSimulator {
private final CustomGxSessionIdCacheImpl gxSessionIdCache = new CustomGxSessionIdCacheImpl();
private final PcrfRecord pcrfRec = new PcrfRecord();
private final ResponseConditions responseConditions = new ResponseConditions();
public CustomGxSessionIdCacheImpl getGxSessionIdCache() {
return gxSessionIdCache;
}
public ArrayList<Rule> getRules() {
return pcrfRec.getRules();
}
所以,上面会被多个线程访问的领域 - 是否足够,以纪念这些领域的挥发,或做我必须标记方法哪些访问他们(有很多不仅在这个类,但其他控制器/类以及)与同步和使用等待/通知等?
非常感谢!
感谢拉尔夫,但最终不仅仅意味着他们只能被实例化一次?我这样说是因为在代码中最终变量是这样更新的:gxSessionIdCache.addIpAddress(gxSessionId,ipAddress) - 实际上它们在作为参数传递给不使用最终字段的方法时被更新 - 即doStuff(GxSessionIDCache gxSessionIdCache){... } – Rory 2012-02-21 11:26:38
我认为最后一个变量的“后面”对象也是“有效的无状态” – Ralph 2012-02-21 11:48:28
@Rory:我已经将这一段扩展了一点,以便说清楚。 – Ralph 2012-02-21 11:52:28