2013-05-02 65 views
0

嗨,我被困在一個嚴重的問題。我創建了一個應用程序的儀表板。我在儀表板上顯示的數據是根據我的業務邏輯創建的。有各種異步觸發器刷新此數據。這些觸發器基於不同的參數被調用。定時器觸發器,實體已刪除,已添加實體。所有這些觸發器具有不同的功能,用於更新儀表板數據(請記住,該數據存儲在數據庫中,即,我直接從數據庫顯示的儀表板上顯示數據)計算儀表板數據需要一些時間。 現在我的問題是,每當兩個不同的觸發器被同時調用時,他們在數據中創建了一致。例如一個觸發器改變了數據,另外一個觸發器也重置了它。所以最終我不會得到期望的結果。現在我想確保一次只有一個觸發器必須更新數據,而另一個觸發器則等待第一個觸發器完成。隊列來管理函數調用

簡單地說,我想保持函數調用隊列,如果已經有一些方法正在執行然後等待它的完成並調用隊列中的下一個方法。

回答

2

聽起來像你想要一個ExecutorService配置一個單一的線程。只需提交每個Runnable,執行程序就會將這些內容排隊等待執行。有關更多信息,請參閱this SO question/answer

0

作爲一種快速解決方案,您可以將每個觸發器包裝在SwingUtilities.invokeLater(Runnable)調用中,以便將任務放入隊列並以串行方式執行。

使用UI隊列確實有道理,因爲您的儀表板是一個UI組件。

0

將儀表板數據更新邏輯放在一個代碼塊中並對該塊進行鎖定。隨着各種觸發器發生,它們將以同步方式自動等待鎖定。

0
ExecutorService executorService2 = Executors.newFixedThreadPool(1); 

它會將一個

的工作和過程中的一個