Jak ustalić, czy obiekt jest zablokowany (zsynchronizowany), aby nie blokować w Javie?

Mam proces A, który zawiera tabelę w pamięci z zestawem rekordów (recordA, recordB, itd ...)

Teraz ten proces może uruchomić wiele wątków, które wpływają na rekordy, a czasami możemy mieć 2 wątki próbujące uzyskać dostęp do tego samego rekordu - ta sytuacja musi zostać odrzucona. W szczególności, jeśli rekord jest ZABLOKOWANY przez jeden wątek, chcę, aby drugi wątek przerwał (nie chcę BLOCK lub WAIT).

Obecnie robię coś takiego:

synchronized(record)
{
performOperation(record);
}

Ale powoduje to problemy ... ponieważ podczas gdy Process1 wykonuje operację, jeśli wejdzie Process2, blokuje / czeka na zsynchronizowanej instrukcji i po zakończeniu procesu 1 wykonuje operację. Zamiast tego chcę coś takiego:

if (record is locked)
   return;

synchronized(record)
{
performOperation(record);
}

Jakieś wskazówki, jak można to osiągnąć? Każda pomoc byłaby bardzo mile widziana. Dzięki,

questionAnswers(7)

yourAnswerToTheQuestion