欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2020年02月20日 15:37:52   作者:七弦桐  
這篇文章主要介紹了Jave時間類庫Timer的使用方法與實例詳解,需要的朋友可以參考下

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

Jave時間類庫Timer簡單使用

  1. 創(chuàng)建Timer對象
  2. 編寫 自己的 task 類,該類集成 TimerTask,重寫 run 方法,把要定時執(zhí)行的邏輯寫在里面
  3. 使用 Timer 執(zhí)行 TimerTask
// 5秒后開始執(zhí)行,每秒執(zhí)行一次
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方法的區(qū)別在于:

schedule在計算下一次執(zhí)行的時間的時候,是通過當前時間(在任務執(zhí)行前得到) + 時間片,而scheduleAtFixedRate方法是通過當前需要執(zhí)行的時間(也就是計算出現在應該執(zhí)行的時間)+ 時間片,前者是運行的實際時間,而后者是理論時間點。比如:

  • 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 類里包含一個任務隊列和一個異步輪詢線程。任務隊列里容納了所有待執(zhí)行的任務,所有的任務將會在這一個異步線程里執(zhí)行,切記:

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

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

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

相關文章

  • Java中使用jaxp進行sax解析_動力節(jié)點Java學院整理

    Java中使用jaxp進行sax解析_動力節(jié)點Java學院整理

    使用SAX的優(yōu)勢在于其解析速度較快,相對于DOM而言占用內存較少。這篇文章主要介紹了Java中使用jaxp進行sax解析,需要的朋友可以參考下
    2017-08-08
  • spring?IOC控制反轉原理詳解

    spring?IOC控制反轉原理詳解

    這篇文章主要為大家詳細介紹了spring?IOC控制反轉原理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 基于Java實現一個復雜關系表達式過濾器

    基于Java實現一個復雜關系表達式過濾器

    這篇文章主要為大家詳細介紹了如何基于Java實現一個復雜關系表達式過濾器。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-07-07
  • 詳解SpringBoot配置文件啟動時動態(tài)配置參數方法

    詳解SpringBoot配置文件啟動時動態(tài)配置參數方法

    這篇文章主要介紹了詳解SpringBoot配置文件啟動時動態(tài)配置參數方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Mybatis-Plus實現多主鍵批量保存及更新詳情

    Mybatis-Plus實現多主鍵批量保存及更新詳情

    這篇文章主要介紹了Mybatis-Plus實現多主鍵批量保存及更新詳情,文章通過圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Java中如何獲取文件的上級目錄

    Java中如何獲取文件的上級目錄

    這篇文章主要介紹了Java中如何獲取文件的上級目錄問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Springboot集成MongoDB無認證與開啟認證的配置方式

    Springboot集成MongoDB無認證與開啟認證的配置方式

    本文主要介紹了Springboot集成MongoDB無認證與開啟認證的配置方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • Java MyBatis可視化代碼生成工具使用教程

    Java MyBatis可視化代碼生成工具使用教程

    這篇文章主要介紹了Java MyBatis可視化代碼生成工具使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Mybatis如何實現關聯屬性懶加載

    Mybatis如何實現關聯屬性懶加載

    這篇文章主要介紹了Mybatis如何實現關聯屬性懶加載的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中IO流 字節(jié)流實例詳解

    Java中IO流 字節(jié)流實例詳解

    這篇文章主要介紹了Java中IO流 字節(jié)流實例詳解的相關資料,需要的朋友可以參考下
    2017-05-05

最新評論