Java編程入門,定時任務timer循環(huán)

Java編程入門,定時任務timer循環(huán)

長沙中公優(yōu)就業(yè)      2022-05-06 13:35:01     87

Java編程入門,定時任務timer循環(huán),什么是TimerTimer是java.util工具包中提供的定時任務類。簡潔易上手的使用方式,能幫我們快速構建一個定時任務。如何使用Timer使

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹

什么是Timer

Timer是java.util工具包中提供的定時任務類。簡潔易上手的使用方式,能幫我們快速構建一個定時任務。

如何使用Timer

使用Timer配置與執(zhí)行定時任務,由兩個部分組成

1.調度者Timer類

2.任務內容類TimerTask類(該類實現了Runnable接口,TimerTask是一個虛類)

使用步驟

1.創(chuàng)建一個Timer對象

2.創(chuàng)建一個Task類,需要繼承TimerTask類,并且實現Runnable的run方法,用于定義具體的定時任務執(zhí)行內容

3.調用Timer對象的schedule方法,并且將步驟的Task對象傳入,同時傳入需要延遲執(zhí)行的時間,和定時任務執(zhí)行的間隔時間。

從源碼分析Java定時任務工具類Timer

實現原理

Timer類原理

Timer類是一個調度者的角色。它包含了兩個最重要的部分:1.任務隊列TaskQueue2.調度線程TimerThread。

調度線程TimerThread

當初始化一個Timer對象的時候,就會執(zhí)行TimerThread線程對象。該線程會進入一個自旋,不斷查詢任務隊列TaskQueue,如果隊列為空,在線程等待。否則會獲取執(zhí)行時間,并且與當前時間比較,如果未到執(zhí)行時間則等待差值。并且如果是重復執(zhí)行的任務,會再次丟入任務隊列TaskQueue。

任務隊列TaskQueue

TaskQueue是一個小頂堆的數據結構,用于存儲TimerTask。因此可以保證每次從隊列中獲取的任務都是最近要執(zhí)行的任務。

當Timer對象調用schedule方法時,會將TimerTask丟入任務隊列,并且喚醒調度者線程

  

Timer類的缺點

1.imer是單線程的,如果一次執(zhí)行多個定時任務,會導致某些任務被其他任務所阻塞。比如A任務每秒執(zhí)行一次,B任務10秒執(zhí)行一次,但是一次執(zhí)行5秒,就會導致A任務在長達5秒都不會得到執(zhí)行機會。

2.Timer的執(zhí)行周期時間依賴于系統(tǒng)時間,timer中,獲取到堆頂任務執(zhí)行時間后,如果執(zhí)行時間還沒到,會計算出需要休眠的時間=(執(zhí)行時間-系統(tǒng)時間),如果系統(tǒng)時間被調整,就會導致休眠時間無限拉長,后面就算改回來了任務也因為在休眠中而得不到執(zhí)行的機會。

以上就是長沙中公優(yōu)就業(yè)java培訓機構的小編針對“Java編程入門,定時任務timer循環(huán)”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。

培訓啦提醒您:交易時請核實對方資質,對于過大宣傳或承諾需謹慎!任何要求預付定金、匯款等方式均存在風險,謹防上當。