一步一步學多執行緒 Timer

2022-07-20 06:00:12 字數 2063 閱讀 4076

在執行定時任務的時候可以用timer來實現,現在小編對學到的進行一次總結,先來看乙個demo

1 public classtimertest 

10 }, 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 classtimertest 

10 }, date,1000);

11 }

12 }

37  執行

38  執行

39  執行

40  執行

在執行timertask的時候可能會出現執行緒執行時間過長的情況,超過了timer的等待時間。此時會是什麼情況呢?

1

public

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。

1

public

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上來就先將缺失的執行補上,然後再開始按照間隔時間一次一次執行。

1

public

class

timertest

15};

16timer.schedule(timertask, date);17}

18 }

在執行完**之後,程式仍然在執行。看timer.class的源**可以發現timer是建立了乙個新的執行緒,而持續跟蹤**發現,新的執行緒進行了乙個while(true)迴圈,再其中進入了等待狀態。

1

public

timer(string name)

將timer設定成守護執行緒,timer有個建構函式。

1

public 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的編寫...