在執行定時任務的時候可以用timer來實現,現在小編對學到的進行一次總結,先來看乙個demo
1 public classtimertest10 }, date);
11 }
12 }
這段**的意思是,先建乙個timer,timer開始執行的時間是」 2017-08-17 11:18:00」。
上述**timer只會執行一次,如果我們想讓定時任務每隔一段時間就執行呢?此時可以用timer提供的schedule方法的另乙個過載 public void schedule(timertask task, long delay, long period)。意思是timer在delay的時候開始執行,每隔period時間長度執行一次。
1 public classtimertest10 }, date,1000);
11 }
12 }
37 執行
38 執行
39 執行
40 執行
在執行timertask的時候可能會出現執行緒執行時間過長的情況,超過了timer的等待時間。此時會是什麼情況呢?
1public
class
timertest catch
(interruptedexception e) 15}
16 }, date,1000);17}
18 }
0 開始執行
2 執行結束
2 開始執行
4 執行結束
4 開始執行
6 執行結束
6 開始執行
8 執行結束
8 開始執行
使用schedule方法執行timer任務,如果開始的時間是在當前時間之前,timer並不會對之前沒有執行的任務進行補充執行。也就是延時之後,那麼timer就從當前時間開始接著按照間隔時間執行。但是有時候我們的需求更加關注的執行的頻率,需要把因為延時而導致沒有執行的任務補充回來,此時就需要用到scheduleatfiexdrate。
1public
class
timertest
14 }, date, 10000);15}
16 }
39 開始執行
執行了39 執行結束
thu aug 17 11:52:00 cst 2017
39 開始執行
執行了39 執行結束
thu aug 17 11:52:00 cst 2017
40 開始執行
執行了40 執行結束
通過執行結果可以看出來,scheduleatfixedrate上來就先將缺失的執行補上,然後再開始按照間隔時間一次一次執行。
1public
class
timertest
15};
16timer.schedule(timertask, date);17}
18 }
在執行完**之後,程式仍然在執行。看timer.class的源**可以發現timer是建立了乙個新的執行緒,而持續跟蹤**發現,新的執行緒進行了乙個while(true)迴圈,再其中進入了等待狀態。
1public
timer(string name)
將timer設定成守護執行緒,timer有個建構函式。
1public timer(boolean
isdaemon)
所以我們在將new timer()改為new timer(true)即可。
timertask的cancel方法是關閉這個任務,timer的cancel方法是關閉整個timer。
timer的執行實際上是啟動了乙個執行緒然後,執行緒中維護了乙個佇列,然後把timertask放入佇列中。timertask的cancel方法就是將自身從任務佇列中移除。timer的cancel方法,是將佇列中的任務全部清空。
一步一步學cscope
告之 1,我不喜歡寫部落格 因為感覺太浪費時間 2,部落格能記住自己某階段學過的東西,而這些東西可能會很快的忘卻 所以我以後要學著在部落格上浪費時間 前言 本文件記錄了我今天 2007 11 9 下午學習cscope的一點收穫,特收錄部落格以作分享。在學習cscope過程中查閱了大量的文件,但發現適...
一步一步學Linq to sql
一步一步學linq to sql 一 預備知識 一步一步學linq to sql 二 datacontext與實體 一步一步學linq to sql 三 增刪改 一步一步學linq to sql 四 查詢句法 一步一步學linq to sql 五 儲存過程 一步一步學linq to sql 六 特性...
一步一步學RenderMonkey
rendermonkey的基本使用方法 用rendermonkey 進行shader開發 一 用rendermonkey 進行shader開發 二 rendermonkey製作photoshop特效 前言 rendermonkey作為shader開發利器而為人所熟知,我們可以專心於shader的編寫...