использование оператора обновления в верхней ссылке в многопоточной среде

я использую toplink, но у меня возникают проблемы при обновлении значений. это мой фрагмент кода

ExpressionBuilder builder = new ExpressionBuilder();
Expression expr = builder.get("addressId").equal("2");
Address address1 = (Address)uow.readObject(Address.class, expr);
address1.setPincode(address1.getPincode() + 1);
uow.registerObject(address1);
uow.writeChanges();

поскольку мой вариант использования заключается в том, что я выполняю один и тот же код в многопоточной среде, скажем, для 10 потоков, поэтому после выполнения я должен получить 10 в качестве значения для пин-кода в БД, если начальное значение было 0. но когда я выполняю код, я не получая должных значений. Кто-нибудь может мне помочь, пожалуйста


person M.J.    schedule 26.01.2010    source источник


Ответы (1)


Похоже, у вас здесь гоночное состояние. Последовательность операций, начиная с чтения объекта и заканчивая записью изменений, должна рассматриваться как атомарная, что означает, что ни одному потоку не может быть разрешено чтение, если другой поток не завершил свою часть.

Я не вижу никакого кода синхронизации для достижения этого. Без такого кода вместо 10 вы случайным образом получите любое число от 1 до 10

person mfeingold    schedule 26.01.2010