использование оператора update в toplink в многопоточной среде - PullRequest
0 голосов
/ 26 января 2010

Я использую 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. но когда я выполняю код, я не получаю правильные значения. Может кто-нибудь, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 26 января 2010

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

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

...