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

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

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

请帮忙。

最佳答案

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

09-27 18:32