在多线程环境中使用toplink中的update语句

时间:2010-01-26 13:00:15

标签: environment toplink multithreading

我正在使用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个线程的多线程环境中执行相同的代码,所以在执行之后,如果初始值为0,我应该得到10作为DB中pincode的值。 但是当我执行代码时,我没有得到正确的值。 任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

听起来你在这里有赛车条件。从读取对象开始到写入更改的操作序列应视为原子操作,这意味着如果另一个线程未完成其部分,则不允许任何线程读取。

我没有看到任何同步代码来实现这一点。如果没有这样的代码而不是10代码,您将随机收到1到10之间的任何数字