最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

使用 Java 來調(diào)度定時(shí)任務(wù)時(shí),我們經(jīng)常會使用 Timer 類搞定。Timer 簡單易用,在一些業(yè)務(wù)場景下用來實(shí)現(xiàn)簡單定時(shí)調(diào)度。

Jave時(shí)間類庫Timer簡單使用

  1. 創(chuàng)建Timer對象
  2. 編寫 自己的 task 類,該類集成 TimerTask,重寫 run 方法,把要定時(shí)執(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 里面的一些常用方法

經(jīng)過delay(ms)后開始進(jìn)行調(diào)度,僅僅調(diào)度一次。

public void schedule(TimerTask task, long delay)

在指定的時(shí)間點(diǎn)time上調(diào)度一次

public void schedule(TimerTask task, Date time)

在delay(ms)后開始調(diào)度,每次調(diào)度完后,最少等待period(ms)后才開始調(diào)度

public void schedule(TimerTask task, long delay, long period)

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

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

在delay(ms)后開始調(diào)度,然后每經(jīng)過period(ms)再次調(diào)度。

public void scheduleAtFixedRate(TimerTask task, long delay, long period)

schedule方法的區(qū)別在于:

schedule在計(jì)算下一次執(zhí)行的時(shí)間的時(shí)候,是通過當(dāng)前時(shí)間(在任務(wù)執(zhí)行前得到) + 時(shí)間片,而scheduleAtFixedRate方法是通過當(dāng)前需要執(zhí)行的時(shí)間(也就是計(jì)算出現(xiàn)在應(yīng)該執(zhí)行的時(shí)間)+ 時(shí)間片,前者是運(yùn)行的實(shí)際時(shí)間,而后者是理論時(shí)間點(diǎn)。比如:

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

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

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

內(nèi)部結(jié)構(gòu)

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

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

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

更多關(guān)于Jave時(shí)間類庫Timer的使用方法與實(shí)例請查看下面的相關(guān)鏈接

相關(guān)文章

  • Java線程優(yōu)先級變量及功能

    Java線程優(yōu)先級變量及功能

    這篇文章主要介紹了Java線程優(yōu)先級變量及功能,關(guān)于優(yōu)先級的問可能有兩個或更多線程被分配了相同的優(yōu)先級,那么它們的執(zhí)行取決于操作系統(tǒng),更多相關(guān)介紹,需要的小伙伴可以參考一下
    2022-06-06
  • SpringBoot?如何通過?Profile?實(shí)現(xiàn)不同環(huán)境下的配置切換

    SpringBoot?如何通過?Profile?實(shí)現(xiàn)不同環(huán)境下的配置切換

    SpringBoot通過profile實(shí)現(xiàn)在不同環(huán)境下的配置切換,比如常見的開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,SpringBoot常用配置文件主要有?2?種:properties?文件和yml文件,本文給大家詳細(xì)介紹SpringBoot?通過?Profile?實(shí)現(xiàn)不同環(huán)境下的配置切換,感興趣的朋友一起看看吧
    2022-08-08
  • springboot3解決跨域的幾種方式小結(jié)

    springboot3解決跨域的幾種方式小結(jié)

    這篇文章主要介紹了springboot3解決跨域的幾種方式,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的解決跨域有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • 淺談springmvc的DispatcherServlet分析

    淺談springmvc的DispatcherServlet分析

    本篇文章主要介紹了淺談springmvc的DispatcherServlet分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • idea使用Maven Helper插件去掉無用的poom 依賴信息(詳細(xì)步驟)

    idea使用Maven Helper插件去掉無用的poom 依賴信息(詳細(xì)步驟)

    這篇文章主要介紹了idea使用Maven Helper插件去掉無用的poom 依賴信息,本文分步驟給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • java 實(shí)現(xiàn)隨機(jī)數(shù)組輸出及求和實(shí)例詳解

    java 實(shí)現(xiàn)隨機(jī)數(shù)組輸出及求和實(shí)例詳解

    這篇文章主要介紹了java 實(shí)現(xiàn)隨機(jī)數(shù)組輸出及求和實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Java如何使用正則表達(dá)式從字符串中提取數(shù)字

    Java如何使用正則表達(dá)式從字符串中提取數(shù)字

    這篇文章主要介紹了Java如何使用正則表達(dá)式從字符串中提取數(shù)字問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 如何使用spring?boot的程序主線程中異步訪問外部接口

    如何使用spring?boot的程序主線程中異步訪問外部接口

    CompletableFuture.supplyAsync提供了一種強(qiáng)大的工具,使您能夠以異步方式執(zhí)行操作,充分利用多核處理器和提高程序性能,同時(shí)保持代碼的清晰性和可維護(hù)性,本文給大家介紹使用spring?boot的程序主線程中異步訪問外部接口,感興趣的朋友一起看看吧
    2023-10-10
  • 一篇文章帶你玩轉(zhuǎn)go語言的接口

    一篇文章帶你玩轉(zhuǎn)go語言的接口

    這篇文章主要介紹了go語言的接口,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧,希望能夠給你帶來幫助
    2021-09-09
  • 建議你使用LocalDateTime而不是Date哦

    建議你使用LocalDateTime而不是Date哦

    這篇文章主要介紹了建議你使用LocalDateTime而不是Date,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論

石台县| 新疆| 德清县| 鄂温| 怀宁县| 大方县| 监利县| 定襄县| 东平县| 漠河县| 京山县| 会宁县| 南昌县| 西青区| 灯塔市| 项城市| 米林县| 兰西县| 如皋市| 濮阳市| 江西省| 天长市| 竹溪县| 北票市| 台东县| 逊克县| 广东省| 濮阳市| 洛隆县| 雅江县| 永昌县| 邯郸县| 马关县| 海宁市| 大方县| 无极县| 油尖旺区| 马尔康县| 温宿县| 汽车| 壶关县|