亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

习水县| 平邑县| 兴文县| 泸溪县| 安顺市| 绥芬河市| 博湖县| 喜德县| 茌平县| 子长县| 五大连池市| 澄城县| 霍林郭勒市| 土默特右旗| 筠连县| 灵武市| 曲沃县| 焦作市| 丹江口市| 库尔勒市| 友谊县| 峨山| 察雅县| 桃园市| 南安市| 柳州市| 额敏县| 漳浦县| 华宁县| 乃东县| 来安县| 南涧| 青州市| 灵璧县| 大方县| 喀喇沁旗| 清水县| 翼城县| 富顺县| 石楼县| 尚志市|