我正在用Java开发计费软件。在我的应用程序中,用户打开一个用于创建发票的窗口。
窗口打开时,它将获取MaxID
并从long
表返回MaxID+1
INVOICE
并将其显示在Jlabel
中。现在,当用户每次开始开票时,发票号将为MaxID+1
。该系统在单用户应用程序中运行良好。
但是,当此应用程序在多台计算机上运行时,会发生很大的问题。例如,当两个用户userOne
和userTwo
同时打开相同的窗口时,他们将获得相同的MaxID+1
。结果,它们两个都将在相同的发票编号中输入数据。我该如何解决?
请帮忙。
最佳答案
竞赛条件的经典场景。您需要同步对MaxId的访问。根据您的数据库,您需要在访问MaxId之前锁定Invoice
表,并在检索到它后将其解锁。 MaxId的检索必须是原子的。