0

我正在使用 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 的值。但是当我执行代码时,我是没有得到正确的值。谁能帮帮我吗

4

1 回答 1

0

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

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

于 2010-01-26T13:09:32.433 回答