Thread Synchronisieren (->Frage dazu) ?

Hallo,

ich möchte/muss einen DB Zugriff synchronisieren. Nachfolgend eine Frage an diejenigen die sich mit diesem heiklen Thema auskennen…

Es soll ein Wert aus der DB abgefragt ,dann etwas berechnet und wieder zurückgeschrieben werden. Das ganz muss als Transaktion ablaufen. DAs Problem ist nur, dass diese TRansaktion sehr langläufig ist und wenn ich diese auf __Methodenebene__ synchronisiere, das enorm langen Wartezeiten für alle anderen Transaktionen/Nutzer kommen wird.

Der Wert aus der DB liegt als String vor (ist einee verschlüsselte int Zahl). Diesen würde ich gerne als „Monitor“ für den Synchronized Block verwenden.

public doCalculationInTransaction(String value) {

synchronized (value) {
//1.Schaue in DB ob Wert Existiert (ist Primary KEY) und wenn
//ja liefert es auch gleich die ganzen Datensätze mit zurück…
//2.Berechne Die WErte
//3.Schreibe Daten zurück.
}

Meine Frage: es ist doch so, dass ein gleicher String, also mit der gleichen „Zeichenfolge“ nur einmal Java-intern „abgelegt“ wird und dann immer mit den entsprechenden (Instanz/Member)Variablen darauf gezeigt wird. Sprich wenn in unterschiedlichen Threads jeweils
value=„TEST“;
gesetzt wird und dann die Methode gleichzeitig aufgerufen wird,
doCalculationInTransaction(value)
das ganze dann korrekt auf „TEST“ bzw den „Monitor-Test“ korrekt synchronisiert wird!?

Gibt es da irgendwelche anderen Seiteneffekte die ich nicht bedacht habe?? Wichtig ist, dass eben immer wenn es die gleiche Zeichenkette ist nur einn einziger die Methode gleichzeitig ausführen darf, wenn es ein unterschiedlicher STring Wert ist, können ruhig 100 Threadsa mit der gleichen Berechnung parallel ablaufen…

Vielen Dank
Julian

Hallo Julian!

Das mit dem synchonize auf den String sollte klappen.
Wichtig: Das notfiyAll nicht vergessen.

Gruß Christian