簡體   English   中英

了解 ScheduledThreadPoolExecutor

[英]Understanding the ScheduledThreadPoolExecutor

我知道由於各種原因,我必須使用它而不是java.util.Timer 所以,為了研究這個,我正在查看文檔,我有幾個問題:

  1. scheduleWithFixedDelay()如何工作? 我的理解是:它在給定的延遲后首先執行任務。 一旦任務完成,它等待指定的時間,然后再次執行任務。
  2. 當我向scheduleAtFixedRate()提交一個比指定延遲花費更多時間來執行的任務時會發生什么? 就像我希望任務每 5 秒執行一次,但需要 10 秒才能完成。 我的理解是任務將被保存在隊列中,一旦核心線程可用就會執行
  3. 這是我對scheduleWithFixedDelay()scheduleAtFixedRate()有何不同的理解: scheduleWithFixedDelay()等待任務完成執行,等待指定的時間,然后再次觸發任務,而scheduleAtFixedRate只會繼續觸發任務而不關心它是否完成與否。 正確的?
  1. 正確的。
  2. 不完全的。 如果一個固定速率任務花費的時間比它的周期長,它會在完成后立即再次運行,但下一次運行不會等待線程。 見下文。
  3. 一個固定速率的任務確實關心它之前的運行是否已經完成,就像一個固定延遲的任務一樣。 根據文檔,“如果此任務的任何執行時間超過其周期,則后續執行可能會延遲開始,但不會同時執行。”

可以這樣想:

  • 對於固定延遲任務,您指定一個時間段,該時間段將是運行之間的確切時間量。 任務的實際持續時間對延遲沒有影響。
  • 對於固定速率任務,您指定一個時間段,該時間段將是運行之間的長時間。 如果任務的實際持續時間比周期長,則速率會降低,並且實際上沒有延遲。

暫無
暫無

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

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