許多項目需要計劃功能,例如我們計劃的工作,重復的工作,異步執行等。
使用計劃任務進行編碼時,最棘手的部分之一是執行部分。 這里的主要經驗法則是注意將要執行的實際代碼。 調度框架在后臺使用工作線程,以便異步執行代碼。 例如,Quartz企業作業調度程序維護一個由主“控制器”線程監控的工作線程池。
您應該記住,調度的作業本質上是異步的,因此引入異步執行層是我們表示保持工作整潔的首選方式。
在過去的很多次中,我們都遇到了這樣的難題:讓調度框架工作線程執行實際代碼,或者實現替代的異步執行層。 每種方法都有其優點和缺點。
使用調度框架執行實際代碼,優點:
- 需要更少的實施工作
- 工作線程由框架“控制器”線程監視
- 實施代碼在準確的預定時間執行
使用調度框架執行實際代碼,缺點:
- 實現代碼與調度框架共存
- 對于“長期存在”的實現代碼,例如與外部系統的通信,“繁忙時間”的數據庫查詢,文件解析,循環等,會引起主要問題,您可能會用盡調度框架工作線程的時間,尤其是在這種情況下在短時間間隔內重復工作。
我們想認為調度框架應該充當“調度程序”而不是“執行者”。 計劃框架的主要職責應該是在適當的時間“觸發”執行事件。 應使用事件偵聽器執行代碼的實際執行。
實現此設計模式的最佳方法是使用異步JMS消息傳遞。 調度框架工作線程應在執行時將消息插入JMS隊列。 JMS偵聽器線程應在收到消息后執行實際代碼。 這樣做會由于JMS的讀/寫開銷而在實際代碼執行之前引入一些延遲,但是“長期存在”的實現代碼不會對調度框架造成任何問題。
翻譯自: https://www.javacodegeeks.com/2010/05/scheduling-principals-in-java.html