2010-01-26 3 views
0

Я использую toplink, но я получаю некоторую проблему при обновлении значений. это мой фрагмент кодс использованием инструкции обновления в 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 в качестве значения для Pincode в БДЕ, если начальное значение было 0. , но когда я выполняю код, я не получаю правильные значения. может кто-нибудь, пожалуйста, помогите мне

ответ

0

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

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