使用Timer注意掛起問題

2021-06-27 08:19:02 字數 918 閱讀 4515

最近在工作中遇到了乙個比較奇怪的問題,產品執行過程中,修改了系統時間之後發現,如果是將系統時間修改至當前時間之後就是正常的,如果是修改到當前時間之前,所有的實時資料就推送不到頁面上,經過除錯發現確實不再有時間的實時資料推送到介面上,這時就需要重新啟動一下服務,就正常了。

針對這個問題做了一下分析和解決,記錄一下,如果以後有遇到這種問題的童鞋們就可以輕鬆知道為什麼會出現這種現象了,並且會timer這個類會有更加深入的了解。

其實通過產品本身的實現就是通過timer這個類實現的,索性就直接找到這個類的實現來看一下:

currenttime = system.currenttimemillis();

executiontime = task.nextexecutiontime;

if (taskfired = (executiontime<=currenttime)) else

}

從這段**可以看出,timertask執行的條件是(executiontime<=currenttime)。其中executiontime取自timertask,而currenttime來自系統時間。原因就在於此,currenttime因為修改系統時間而提前了,所以這個條件(executiontime<=currenttime)永遠也不會達到,timertask將不會被執行。

所以通過這段**來看,如果系統時間修改到當前時間之後,不會影響timer的執行;但是如果系統時間修改到當前時間之前,就會導致timer掛起。

如果是修改到當前時間之前,timer處於掛起狀態的時候就需要重新啟動一下服務,來重新出發timer定時任務。

這種情況正好是產品中用到的timertask所導致的,所以如果有時候遇到問題需要去好好研讀一下jdk中的**,裡面有很多內容需要我們去理解,只有把這些基礎的內容夯實,才能在遇到問題的時候不會毛手毛腳,四處亂找。

Timer 使用的注意事項

timer,顧名思義 定時器 在程式中,需要定期去做某件事時,timer 通常都是我們的首選,因為 timer 確實簡單易用。通常,我們使用 timer 時,只做兩件事 1 給 timer 指定乙個 interval 值,該值是以 毫秒 為單位的。我們這裡,比如賦值 2000 2秒 2 在 time...

react native中timer的注意點

務必在解除安裝元件前清除定時器!我們發現很多 react native 應用發生致命錯誤 閃退 是與計時器有關。具體來說,是在某個元件被解除安裝 unmount 之後,計時器卻仍然在執行。要解決這個問題,只需銘記在unmount元件時清除 cleartimeout clearinterval 所有用...

Timer簡單使用

using system using system.threading class timerexample creating timer.n datetime.now.tostring h mm ss.fff timer statetimer new timer timerdelegate,aut...