簡體   English   中英

使用Thread.sleep(),Timer或platform cron作業在Java EE應用程序中進行定期操作

[英]Use Thread.sleep(), Timer or platform cron job for a periodic operation in Java EE application

我有一個Java EE應用程序,每十五分鍾從互聯網上下載股票價格。 從計時精度的角度來看,最好是應用程序內化這個周期性操作,即將Thread.sleep()與計數器結合使用或設置計時器或者通過URL公開任務並擁有平台cron會更好作業定期點擊URL(按照要求的頻率)。

這兩種方法的優點和缺點是什么?

我看到針對OpenJDK實現報告的計時器錯誤讓我感到震驚。 該錯誤表明,系統時間的變化會影響與時間相關的操作和方法(如睡眠和計時器周期性)的操作。

不推薦使用Timer ,但現在存在更好的替代方法: SheduledExecutorService 使其更好的一個原因是它使用相對時間而不是絕對時間進行調度。

恕我直言,使用外部cron腳本或內部計時器只是一個問題或偏好。 內部計時器更容易設置,但如果您已經安裝了其他計算機,則可能需要使用另一個計時器,並將此職責放在一個位置。

Thread.sleep不是定期執行代碼的推薦方法。 這是不准確的,通常是糟糕設計的標志。 我建議你使用Timer類來定期安排代碼的執行。

絕對考慮使用為任務構建的調度作業。 嘗試從任何時序考慮中分離任務本身。

  • 正如所建議的那樣,Quartz是一個不錯的選擇。
  • Cron也不錯,但需要更多設置才能與您的任務集成。
  • 如果在Java EE上,您可以使用EJB計時器。
  • 您可以使用ScheduledExecutorService自行滾動(不推薦)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM