嘿伙计们,我陷入了一个严重的问题。我创建了一个应用程序仪表板。我在Dashboard上显示的数据是根据我的业务逻辑创建的。刷新此数据有各种异步触发器。基于不同的参数调用这些触发器。定时器触发器,实体已删除,实体已添加。所有这些触发器都有不同的功能,用于更新仪表板数据(请记住,此数据存储在数据库中,即我在仪表板上直接从数据库中显示数据)。 计算仪表板数据需要一些时间。 现在我的问题是,只要同时调用两个不同的触发器,它们就会在数据中创建不一致。例如一个触发器改变数据,另一个触发器也重置它..所以最后我不会得到想要的结果。现在我想确保一次只有一个触发器必须更新数据而另一个触发器正在等待第一个触发器完成。
我想要的只是将函数调用保留在队列中,如果已经有一些方法正在执行,那么等待它的完成并调用队列中的下一个方法。
答案 0 :(得分:2)
听起来您希望ExecutorService配置一个线程。只需提交每个Runnable,执行程序就会将这些队列排队等待执行。有关详细信息,请参阅this SO question/answer。
答案 1 :(得分:0)
作为快速修复,您可以在SwingUtilities.invokeLater(Runnable)
调用中包装每个触发器,将任务放入队列并以串行方式执行。
使用UI队列确实有意义,因为您的仪表板是一个UI组件。
答案 2 :(得分:0)
将仪表板数据更新逻辑放在代码块中并对该块执行锁定。当各种触发器发生时,它们将自动以同步方式等待锁定。
答案 3 :(得分:0)
ExecutorService executorService2 = Executors.newFixedThreadPool(1);
将作业和处理逐个排队