0
未發佈的Java應用程序代碼具有以下結構(這在許多地方都有)。該類只在應用程序上下文加載期間加載一次。以前這工作得很好。但是,當移動到具有多個線程的迴歸環境時,由於共享成員變量,這會導致併發問題。替換Spring綁定類中的共享成員變量
Class A {
private Set<String> codeSet = null;
public void method() {
codeSet = SomeRepo.someMethod(session.getUser()); // Heavy repo call, returns user specific data.
method1();
method2();
....
methodn();
}
private methodn() {
codeSet.iterator().next();
}
}
此問題可以通過將變量作用域更改爲方法,並讓它跨所有使用此變量的後續私有方法來緩解。但是這涉及到應用程序代碼的很多變化。
是否有任何干淨的解決方案,可以解決以下沒有太多的變化。提前致謝。
你提到線程的問題。例如比賽條件或什麼? –
該變量可以被併發線程訪問導致數據被破壞 –
你有沒有試過java ReentrantLock鎖定該成員,直到該特定線程完成它或同步? –