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

Java定時(shí)器通信協(xié)議管理模塊Timer詳解

 更新時(shí)間:2022年08月05日 08:30:46   作者:???????萬(wàn)惡的沫白  
這篇文章主要介紹了Java定時(shí)器通信協(xié)議管理模塊Timer,?Timer一般指定時(shí)器(通信協(xié)議管理模塊)人類最早使用的定時(shí)工具是沙漏或水漏,但在鐘表誕生發(fā)展成熟之后,人們開(kāi)始嘗試使用這種全新的計(jì)時(shí)工具來(lái)改進(jìn)定時(shí)器,達(dá)到準(zhǔn)確控制時(shí)間的目的

Timer詳解

TimerTimerTask用于在后臺(tái)線程中調(diào)度任務(wù)的java.util類。TimerTask負(fù)責(zé)任務(wù)的執(zhí)行,Timer負(fù)責(zé)任務(wù)的調(diào)度。

定時(shí)功能

Timer提供了三種定時(shí)模式:

  • 一次性任務(wù)
  • 按照固定的延遲執(zhí)行(fixed delay)
  • 按照固定的周期執(zhí)行(fixed rate

執(zhí)行一次

Timer提供了兩種方法,應(yīng)用于不同場(chǎng)景:

//在當(dāng)前時(shí)間往后delay個(gè)毫秒開(kāi)始執(zhí)行
public void schedule(TimerTask task, long delay) {...}
//在指定的time時(shí)間點(diǎn)執(zhí)行
public void schedule(TimerTask task, Date time) {...}
public static void main(String[] args) {
    //定義一個(gè)Timer
    Timer timer = new Timer("test-timer");
    //定義一個(gè)TimerTask
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            System.out.println("任務(wù)執(zhí)行時(shí)間:" + new Date() + "------------"
                               + "線程:" + Thread.currentThread().getName());
        }
    };
    long delay = 3000L;
    timer.schedule(task, delay);
    System.out.println("任務(wù)添加時(shí)間:" + new Date() + "------------"
                       + "線程:" + Thread.currentThread().getName());
}

工作方式:當(dāng)達(dá)到我們指定的時(shí)間,執(zhí)行一次結(jié)束

任務(wù)雖然運(yùn)行結(jié)束,但進(jìn)程沒(méi)有被銷毀。并且執(zhí)行任務(wù)的線程名為我們定義的Timer的名稱。

我們看一下源碼:

public class Timer {
    //小頂堆,用來(lái)存放timeTask
    private final TaskQueue queue = new TaskQueue();
    
    private final TimerThread thread = new TimerThread(queue);
    
    public Timer(String name) {
        thread.setName(name);
        thread.start();
    }
}
public abstract class TimerTask implements Runnable {
    long nextExecutionTime;
    long period = 0;
    public abstract void run();
}
  • TaskQueue:基于小頂堆實(shí)現(xiàn),用來(lái)存放timerTask
  • TimerThread:任務(wù)執(zhí)行線程,繼承Thread
  • nextExecutionTime:假如任務(wù)需要多次執(zhí)行表示下一次執(zhí)行時(shí)間
  • period:每次任務(wù)執(zhí)行間隔時(shí)間
  • run():我們執(zhí)行任務(wù)的內(nèi)容

創(chuàng)建一個(gè) Timer 對(duì)象就是新啟動(dòng)了一個(gè)線程,但是這個(gè)新啟動(dòng)的線程,并不是守護(hù)線程,它一直在后臺(tái)運(yùn)行,通過(guò)如下 可以將新啟動(dòng)的 Timer 線程設(shè)置為守護(hù)線程。我們可以使用以下構(gòu)造方法(public Timer(boolean isDaemon)public Timer(String name, boolean isDaemon))來(lái)設(shè)置。

Fixed Delay模式

//從當(dāng)前時(shí)間開(kāi)始delay個(gè)毫秒數(shù)開(kāi)始定期執(zhí)行,周期是period個(gè)毫秒數(shù)
public void schedule(TimerTask task, long delay, long period) {...}
////從指定的firstTime開(kāi)始定期執(zhí)行,往后每次執(zhí)行的周期是period個(gè)毫秒數(shù)
public void schedule(TimerTask task, Date firstTime, long period){...}

工作方式:

  • 第一次執(zhí)行,按照指定時(shí)間開(kāi)始(如果此時(shí)TimerThread沒(méi)有執(zhí)行其他任務(wù)),如有其他任務(wù)在執(zhí)行,那就需要等到其他任務(wù)執(zhí)行完成才能執(zhí)行
  • 第二次執(zhí)行,每次任務(wù)是上一次任務(wù)開(kāi)始執(zhí)行時(shí)間加上執(zhí)行的period時(shí)間。

到此這篇關(guān)于Java定時(shí)器通信協(xié)議管理模塊Timer詳解的文章就介紹到這了,更多相關(guān)Java Timer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot 使用 OpenAPI3 規(guī)范整合 knife4j的詳細(xì)過(guò)程

    SpringBoot 使用 OpenAPI3 規(guī)范整合 knife4j的詳細(xì)過(guò)程

    Swagger工具集使用OpenAPI規(guī)范,可以生成、展示和測(cè)試基于OpenAPI規(guī)范的API文檔,并提供了生成客戶端代碼的功能,本文給大家介紹SpringBoot使用OpenAPI3規(guī)范整合knife4j的詳細(xì)過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • SystemServer進(jìn)程啟動(dòng)過(guò)程解析

    SystemServer進(jìn)程啟動(dòng)過(guò)程解析

    這篇文章主要為大家介紹了SystemServer進(jìn)程啟動(dòng)過(guò)程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • IDEA解決Java:程序包xxxx不存在的問(wèn)題

    IDEA解決Java:程序包xxxx不存在的問(wèn)題

    這篇文章主要介紹了IDEA解決Java:程序包xxxx不存在的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 圖解如何在Spring Boot中使用JSP頁(yè)面

    圖解如何在Spring Boot中使用JSP頁(yè)面

    這篇文章主要介紹了圖解如何在Spring Boot中使用JSP頁(yè)面,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán)的示例代碼

    Java實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán)的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Mybatis-Plus批量插入用法詳解

    Mybatis-Plus批量插入用法詳解

    mybatis-plus的IService接口默認(rèn)提供saveBatch批量插入,也是唯一一個(gè)默認(rèn)批量插入,在數(shù)據(jù)量不是很大的情況下可以直接使用,但這種是一條一條執(zhí)行的效率上會(huì)有一定的瓶頸,今天我們就來(lái)研究研究mybatis-plus中的批量插入
    2023-02-02
  • 如何通過(guò)properties文件配置web.xml中的參數(shù)

    如何通過(guò)properties文件配置web.xml中的參數(shù)

    這篇文章主要介紹了如何通過(guò)properties文件配置web.xml中的參數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 輕松掌握java中介者模式

    輕松掌握java中介者模式

    這篇文章主要幫助大家輕松掌握java中介者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Mybatis實(shí)現(xiàn)插入數(shù)據(jù)后返回主鍵過(guò)程解析

    Mybatis實(shí)現(xiàn)插入數(shù)據(jù)后返回主鍵過(guò)程解析

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)插入數(shù)據(jù)后返回主鍵過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 創(chuàng)建一個(gè)Java的不可變對(duì)象

    創(chuàng)建一個(gè)Java的不可變對(duì)象

    這篇文章主要介紹了創(chuàng)建一個(gè)Java的不可變對(duì)象,一個(gè)類的對(duì)象在通過(guò)構(gòu)造方法創(chuàng)建后如果狀態(tài)不會(huì)再被改變,那么它就是一個(gè)不可變(immutable)類。它的所有成員變量的賦值僅在構(gòu)造方法中完成,不會(huì)提供任何 setter 方法供外部類去修改,需要的朋友可以參考下
    2021-11-11

最新評(píng)論