您好,登錄后才能下訂單哦!
使用 Java 來調度定時任務時,我們經常會使用 Timer 類搞定。Timer 簡單易用,在一些業務場景下用來實現簡單定時調度。
// 5秒后開始執行,每秒執行一次 Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("hello world"); } }, 50000 , 1000);
經過delay(ms)后開始進行調度,僅僅調度一次。
public void schedule(TimerTask task, long delay)
在指定的時間點time上調度一次
public void schedule(TimerTask task, Date time)
在delay(ms)后開始調度,每次調度完后,最少等待period(ms)后才開始調度
public void schedule(TimerTask task, long delay, long period)
在到了指定時間后開始調度,每次調度完后,最少等待period(ms)后才開始調度。
public void schedule(TimerTask task, Date firstTime, long period)
在delay(ms)后開始調度,然后每經過period(ms)再次調度。
public void scheduleAtFixedRate(TimerTask task, long delay, long period)
schedule方法的區別在于:
schedule在計算下一次執行的時間的時候,是通過當前時間(在任務執行前得到) + 時間片,而scheduleAtFixedRate方法是通過當前需要執行的時間(也就是計算出現在應該執行的時間)+ 時間片,前者是運行的實際時間,而后者是理論時間點。比如:
在到了指定時間后開始調度,每次調度完后,最少等待period(ms)后才開始調度。
public void scheduleAtFixedRate(TimerTask task, Date firstTime,long period)
Timer 類里包含一個任務隊列和一個異步輪詢線程。任務隊列里容納了所有待執行的任務,所有的任務將會在這一個異步線程里執行,切記:
public class Timer { private final TaskQueue queue = new TaskQueue(); private final TimerThread thread = new TimerThread(queue); }
Timer 的任務隊列 TaskQueue 是一個特殊的隊列,它內部是一個數組。這個數組會按照待執行時間進行堆排序,堆頂元素總是待執行時間最小的任務。
更多關于Jave時間類庫Timer的使用方法與實例請查看下面的相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。