我们有以下代码要在 Java 中执行:
public void doSomething() {
doSomeDBOperationForOrg();
doOtherOperations();
}
void doSomeDBOperationForOrg() {
//should be executed only once per organization.
}
void doOtherOperations() {
//should be executed only when the DB operation for the organization is done, and not before
}
该方法doSomething被多个组织下的多个用户同时调用。我们只需要为doSomeDBOperationForOrg每个组织执行一次方法,并且doOtherOperations对于调用该doSomething方法的所有用户,但只有在doSomeDBOperationForOrg完成之后。
一种选择是通过doSomething和/或“同步” doSomeDBOperationForOrg,并维护更新组织的列表。
public synchronized void doSomething() {
if(!orgUpdatedList.contains(organization)) {
doSomeDBOperationForOrg();
orgUpdatedList.add(organization);
}
doOtherOperations();
}
但这将阻止用户的所有线程,无论其组织如何。当我们拥有庞大的用户列表时,这是不可取的。有人可以建议一个更好的方法来实现这一目标吗?