0

我正在用java开发计费软件。在我的应用程序中,用户打开一个用于创建发票的窗口。

当窗口打开时,它会 从表中获取MaxID并返回 a并将其显示在 a 中。现在,当用户每次开始计费时,发票编号将为. 该系统在单用户应用程序中运行良好。long MaxID+1INVOICEJlabelMaxID+1

但是当这个应用程序在多台计算机上运行时,就会发生一个很大的问题。例如,当两个用户userOne同时userTwo打开同一个窗口时,他们将得到相同的MaxID+1. 结果,他们俩都将在同一发票号中输入数据。我该如何解决这个问题?

请帮忙。

4

1 回答 1

1

Race Condition 的经典场景。您需要同步对 MaxId 的访问。根据您的数据库,您需要Invoice在访问 MaxId 之前锁定表,并在检索它后解锁它。MaxId 的检索必须是原子的。

于 2013-02-22T12:14:23.957 回答