2013-05-02 62 views
0

嗨,我被困在一个严重的问题。我创建了一个应用程序的仪表板。我在仪表板上显示的数据是根据我的业务逻辑创建的。有各种异步触发器刷新此数据。这些触发器基于不同的参数被调用。定时器触发器,实体已删除,已添加实体。所有这些触发器具有不同的功能,用于更新仪表板数据(请记住,该数据存储在数据库中,即,我直接从数据库显示的仪表板上显示数据)计算仪表板数据需要一些时间。 现在我的问题是,每当两个不同的触发器被同时调用时,他们在数据中创建了一致。例如一个触发器改变了数据,另外一个触发器也重置了它。所以最终我不会得到期望的结果。现在我想确保一次只有一个触发器必须更新数据,而另一个触发器则等待第一个触发器完成。队列来管理函数调用

简单地说,我想保持函数调用队列,如果已经有一些方法正在执行然后等待它的完成并调用队列中的下一个方法。

回答

2

听起来像你想要一个ExecutorService配置一个单一的线程。只需提交每个Runnable,执行程序就会将这些内容排队等待执行。有关更多信息,请参阅this SO question/answer

0

作为一种快速解决方案,您可以将每个触发器包装在SwingUtilities.invokeLater(Runnable)调用中,以便将任务放入队列并以串行方式执行。

使用UI队列确实有道理,因为您的仪表板是一个UI组件。

0

将仪表板数据更新逻辑放在一个代码块中并对该块进行锁定。随着各种触发器发生,它们将以同步方式自动等待锁定。

0
ExecutorService executorService2 = Executors.newFixedThreadPool(1); 

它会将一个

的工作和过程中的一个