У меня есть процесс A, содержащий таблицу в памяти с набором записей (recordA, recordB и т.д.)
Теперь этот процесс может запускать много потоков, которые влияют на записи, и иногда у нас может быть 2 потока, пытающихся получить доступ к одной и той же записи - эта ситуация должна быть отклонена. В частности, если запись LOCKED одним потоком, я хочу, чтобы другой поток прерывался (я не хочу БЛОКИРОВАТЬ или ЖДАТЬ).
В настоящее время я делаю что-то вроде этого:
synchronized(record)
{
performOperation(record);
}
Но это вызывает у меня проблемы... потому что, пока Process1 выполняет операцию, если Process2 входит в нее, блокирует/ждет синхронизированный оператор и когда Process1 завершен, он выполняет операцию. Вместо этого я хочу что-то вроде этого:
if (record is locked)
return;
synchronized(record)
{
performOperation(record);
}
Любые подсказки о том, как это можно сделать? Любая помощь приветствуется. Спасибо,