我有一個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