Betrachten Sie die folgende Methode:Java synchronisierte Methode um Parameterwert
public void upsert(int customerId, int somethingElse) {
// some code which is prone to race conditions
}
Ich mag diese Methode von Rennbedingungen schützen, aber dies kann nur auftreten, wenn zwei Threads mit den gleichen customerId
sind es zugleich Aufruf . Wenn ich die ganze Methode mache synchronized
wird es die Effizienz reduzieren und es ist nicht wirklich notwendig. Was ich wirklich will, ist es, es um die customerId
zu synchronisieren. Ist das irgendwie mit Java möglich? Gibt es dafür eingebaute Tools oder würde ich eine Map
von Integers
als Sperren verwenden?
Auch fühlen sich frei zu beraten, wenn Sie denken, dass ich etwas falsch hier tun :)
Dank!
Es sicherlich * fühlt sich falsch *. Vielleicht sollten Sie Ihre Frage bearbeiten, um mehr Details darüber zu erhalten, warum Sie überhaupt eine Synchronisierung benötigen. –
upsert klingt, als würde es einige Datenbank dml ausführen. In diesem Fall versuchen Sie möglicherweise, ein Transaktionsisolationsproblem durch Sperren zu beheben? Wenn ja, wäre das eine schlechte Idee. –
@NathanHughes Ich benutze eine alte Version von Postgres, wo Upsert noch nicht verfügbar ist :) –