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,