Ein noch nicht freigegebener Java-Anwendungscode hat die folgende Struktur (dies ist an zahlreichen Stellen vorhanden). Die Klasse wird nur einmal während des Ladens des Anwendungskontexts geladen. Dies hat vorher gut funktioniert. Wenn Sie jedoch mit mehreren Threads in eine Regressionsumgebung wechseln, führt dies aufgrund der freigegebenen Elementvariablen zu Problemen mit dem gemeinsamen Zugriff.Ersetzen einer freigegebenen Elementvariable in einer Spring-Klasse
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();
}
}
Dieses Problem kann durch Änderung der variablen Rahmen des Verfahrens verringert werden, und nachdem er über alle nachfolgenden privaten Methoden geführt, die diese Variable verwenden. Dies beinhaltet jedoch viele Änderungen im Anwendungscode.
Gibt es eine saubere Lösung, die das unten ohne viel Änderungen auflösen kann. Danke im Voraus.
Sie Thread Probleme erwähnt. zB Race Condition oder was? –
die Variable kann durch gleichzeitige Threads zugegriffen werden, die Daten beschädigt werden –
haben Sie versucht, Java ReentrantLock dieses Mitglied zu sperren, bis dieser bestimmte Thread damit oder Synchronisation abgeschlossen? –