1

嘿伙计们,我遇到了一个关键问题。我创建了一个应用程序仪表板。我在仪表板上显示的数据是根据我的业务逻辑创建的。有各种异步触发器可以刷新此数据。这些触发器是根据不同的参数调用的。例如计时器触发器、删除实体、添加实体。所有这些触发器都有不同的功能来更新仪表板的数据(记住这些数据存储在数据库中,即我在仪表板上显示直接从数据库读取的数据)仪表板数据的计算需要一些时间. 现在我的问题是,每当同时调用两个不同的触发器时,它们都会在数据中产生不一致的情况。例如,一个触发器更改数据,另一个也重置它..所以最后我不会得到想要的结果。现在我想确保一次只有一个触发器必须更新数据,而另一个触发器正在等待第一个触发器完成。

我想要的只是将函数调用保留在队列中,如果已经有某个方法正在执行,则等待其完成并调用队列中的下一个方法。

4

4 回答 4

2

听起来您想要一个配置有单个线程的ExecutorService 。只需提交每个 Runnable,执行器就会将它们排队等待执行。有关更多信息,请参阅此 SO 问题/答案

于 2013-05-02T09:16:17.390 回答
0
ExecutorService executorService2 = Executors.newFixedThreadPool(1);

它将作业排队并一一处理

于 2014-04-08T09:58:07.327 回答
0

作为快速修复,您可以将每个触发器包装在SwingUtilities.invokeLater(Runnable)调用中,这会将任务放入队列中并以串行方式执行它。

使用 UI 队列确实有意义,因为您的 Dashboard 是一个 UI 组件。

于 2013-05-02T09:16:39.603 回答
0

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

于 2013-05-02T09:17:18.023 回答