Java定時器通信協(xié)議管理模塊Timer詳解
Timer詳解
Timer和TimerTask用于在后臺線程中調(diào)度任務的java.util類。TimerTask負責任務的執(zhí)行,Timer負責任務的調(diào)度。
定時功能
Timer提供了三種定時模式:
- 一次性任務
- 按照固定的延遲執(zhí)行(
fixed delay) - 按照固定的周期執(zhí)行(
fixed rate)
執(zhí)行一次
Timer提供了兩種方法,應用于不同場景:
//在當前時間往后delay個毫秒開始執(zhí)行
public void schedule(TimerTask task, long delay) {...}
//在指定的time時間點執(zhí)行
public void schedule(TimerTask task, Date time) {...}public static void main(String[] args) {
//定義一個Timer
Timer timer = new Timer("test-timer");
//定義一個TimerTask
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("任務執(zhí)行時間:" + new Date() + "------------"
+ "線程:" + Thread.currentThread().getName());
}
};
long delay = 3000L;
timer.schedule(task, delay);
System.out.println("任務添加時間:" + new Date() + "------------"
+ "線程:" + Thread.currentThread().getName());
}
工作方式:當達到我們指定的時間,執(zhí)行一次結束
任務雖然運行結束,但進程沒有被銷毀。并且執(zhí)行任務的線程名為我們定義的Timer的名稱。
我們看一下源碼:
public class Timer {
//小頂堆,用來存放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:基于小頂堆實現(xiàn),用來存放timerTaskTimerThread:任務執(zhí)行線程,繼承Thread類nextExecutionTime:假如任務需要多次執(zhí)行表示下一次執(zhí)行時間period:每次任務執(zhí)行間隔時間run():我們執(zhí)行任務的內(nèi)容
創(chuàng)建一個 Timer 對象就是新啟動了一個線程,但是這個新啟動的線程,并不是守護線程,它一直在后臺運行,通過如下 可以將新啟動的 Timer 線程設置為守護線程。我們可以使用以下構造方法(public Timer(boolean isDaemon)或public Timer(String name, boolean isDaemon))來設置。
Fixed Delay模式
//從當前時間開始delay個毫秒數(shù)開始定期執(zhí)行,周期是period個毫秒數(shù)
public void schedule(TimerTask task, long delay, long period) {...}
////從指定的firstTime開始定期執(zhí)行,往后每次執(zhí)行的周期是period個毫秒數(shù)
public void schedule(TimerTask task, Date firstTime, long period){...}工作方式:
- 第一次執(zhí)行,按照指定時間開始(如果此時
TimerThread沒有執(zhí)行其他任務),如有其他任務在執(zhí)行,那就需要等到其他任務執(zhí)行完成才能執(zhí)行 - 第二次執(zhí)行,每次任務是上一次任務開始執(zhí)行時間加上執(zhí)行的
period時間。
到此這篇關于Java定時器通信協(xié)議管理模塊Timer詳解的文章就介紹到這了,更多相關Java Timer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot 使用 OpenAPI3 規(guī)范整合 knife4j的詳細過程
Swagger工具集使用OpenAPI規(guī)范,可以生成、展示和測試基于OpenAPI規(guī)范的API文檔,并提供了生成客戶端代碼的功能,本文給大家介紹SpringBoot使用OpenAPI3規(guī)范整合knife4j的詳細過程,感興趣的朋友跟隨小編一起看看吧2023-12-12
如何通過properties文件配置web.xml中的參數(shù)
這篇文章主要介紹了如何通過properties文件配置web.xml中的參數(shù)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Mybatis實現(xiàn)插入數(shù)據(jù)后返回主鍵過程解析
這篇文章主要介紹了Mybatis實現(xiàn)插入數(shù)據(jù)后返回主鍵過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06

