Wie kann man feststellen, ob ein Objekt gesperrt (synchronisiert) ist, um in Java nicht zu blockieren?

Ich habe einen Prozess A, der eine Tabelle im Speicher mit einer Reihe von Datensätzen enthält (recordA, recordB, etc ...)

Jetzt kann dieser Prozess viele Threads starten, die sich auf die Datensätze auswirken, und manchmal können zwei Threads versuchen, auf denselben Datensatz zuzugreifen. Diese Situation muss verweigert werden. Insbesondere wenn ein Datensatz von einem Thread GESPERRT ist, möchte ich, dass der andere Thread abgebrochen wird (ich möchte nicht BLOCKIEREN oder WARTEN).

Momentan mache ich so etwas:

synchronized(record)
{
performOperation(record);
}

Aber das verursacht mir Probleme ... denn während Process1 die Operation ausführt, blockiert / wartet Process2 die synchronisierte Anweisung, und wenn Process1 beendet ist, führt er die Operation aus. Stattdessen möchte ich so etwas:

if (record is locked)
   return;

synchronized(record)
{
performOperation(record);
}

Gibt es Hinweise, wie dies erreicht werden kann? Jede Hilfe wäre sehr dankbar. Vielen Dank,

Antworten auf die Frage(7)

Ihre Antwort auf die Frage