Java 防止对共享资源的并发更新
我有p类、Q类和R类相应地更新了表Pt、表Qt和表Rt。p类可以从图形界面Pi修改,Qi和Ri也是如此 现在,在类p、Q和R之间共享某些数据 出于这个原因,我们想提醒用户,每当Pi、Qi和Ri同时更新数据时,就会显示一条消息(在所有界面上),屏幕就会冻结: 正在从其他位置修改此数据,请稍候 我曾想过在这里使用Observable模式,其中p、Q和R类在Observable上注册,Observable负责并发访问。Java 防止对共享资源的并发更新,java,concurrency,observable,Java,Concurrency,Observable,我有p类、Q类和R类相应地更新了表Pt、表Qt和表Rt。p类可以从图形界面Pi修改,Qi和Ri也是如此 现在,在类p、Q和R之间共享某些数据 出于这个原因,我们想提醒用户,每当Pi、Qi和Ri同时更新数据时,就会显示一条消息(在所有界面上),屏幕就会冻结: 正在从其他位置修改此数据,请稍候 我曾想过在这里使用Observable模式,其中p、Q和R类在Observable上注册,Observable负责并发访问。 这是正确的方法吗?对我来说,这听起来是一个不错的计划,我会将代码放在一个条件块中,
这是正确的方法吗?对我来说,这听起来是一个不错的计划,我会将代码放在一个条件块中,该条件块会检查observer对象,以查看是否为此代码设置了命名锁,如果没有,则运行代码,否则会响应用户告诉他们正在修改数据。根据您的语言和环境,有许多不同的方法可以做到这一点。我是命名锁的爱好者,在命名锁中,您可以在属于具有唯一名称的观察者对象的关联数组中设置一个锁,并且观察者对象有一个方法来检查是否存在命名锁以及是否已锁定
如果您需要所有并发请求来修改要运行的数据,那么还需要创建一个队列对象来组织和处理一个或多个队列请求,当观察者对象释放锁时,它将处理队列中的下一项。我不知道是否只有观察者对您有好处。GUI渲染器线程应该只有一个,它应该只做最少的工作,而且它应该包含非常少的并发性,因为它会导致延迟 我想这会符合你的要求