中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java時間類庫Timer的使用方法與實例詳解

發布時間:2020-08-26 21:52:14 來源:腳本之家 閱讀:136 作者:七弦桐 欄目:編程語言

使用 Java 來調度定時任務時,我們經常會使用 Timer 類搞定。Timer 簡單易用,在一些業務場景下用來實現簡單定時調度。

Jave時間類庫Timer簡單使用

  1. 創建Timer對象
  2. 編寫 自己的 task 類,該類集成 TimerTask,重寫 run 方法,把要定時執行的邏輯寫在里面
  3. 使用 Timer 執行 TimerTask
// 5秒后開始執行,每秒執行一次
Timer timer = new Timer();
timer.schedule(new TimerTask() {
    public void run() {
      System.out.println("hello world");
    }
}, 50000 , 1000);

Timer 里面的一些常用方法

經過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方法是通過當前需要執行的時間(也就是計算出現在應該執行的時間)+ 時間片,前者是運行的實際時間,而后者是理論時間點。比如:

  • schedule 時間片是 5s,那么理論上會在 5、10、15、20這些時間片被調度,但是如果由于某些 CPU 征用導致未被調度,假如等到第 8s 才被第一次調度,那么 schedule 方法計算出來的下一次時間應該是第 13s 而不是第 10s
  • scheduleAtFixedRate 方法就是每次理論計算出下一次需要調度的時間用以排序,若第8s被調度,那么計算出應該是第 10s,所以它距離當前時間是 2s

在到了指定時間后開始調度,每次調度完后,最少等待period(ms)后才開始調度。

public void scheduleAtFixedRate(TimerTask task, Date firstTime,long period)

內部結構

Timer 類里包含一個任務隊列和一個異步輪詢線程。任務隊列里容納了所有待執行的任務,所有的任務將會在這一個異步線程里執行,切記:

  • 任務的執行代碼不可以拋出異常,否則會導致 Timer 線程掛掉,所有的任務都沒得執行了。
  • **單個任務也不易執行時間太長,否則會影響任務調度在時間上的精準性。**比如你一個任務跑了太久,其它等著調度的任務就一直處于饑餓狀態得不到調度。所有任務的執行都是這單一的 TimerThread 線程。
public class Timer {
  private final TaskQueue queue = new TaskQueue();
  private final TimerThread thread = new TimerThread(queue);
}

Timer 的任務隊列 TaskQueue 是一個特殊的隊列,它內部是一個數組。這個數組會按照待執行時間進行堆排序,堆頂元素總是待執行時間最小的任務。

更多關于Jave時間類庫Timer的使用方法與實例請查看下面的相關鏈接

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

晋中市| 七台河市| 乌苏市| 绵竹市| 鲁山县| 时尚| 海淀区| 浠水县| 肥东县| 九龙县| 伊春市| 汉阴县| 莱西市| 白城市| 南靖县| 巫山县| 绥化市| 汝阳县| 隆子县| 福安市| 龙游县| 清苑县| 高密市| 包头市| 黄石市| 虹口区| 府谷县| 神池县| 昌邑市| 枣强县| 鹿泉市| 阳西县| 兖州市| 扶风县| 佛坪县| 梨树县| 友谊县| 新宁县| 宁远县| 栾川县| 湖口县|