日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java定时器Timer

發(fā)布時(shí)間:2025/5/22 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java定时器Timer 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java定時(shí)器Timer
在JDK庫(kù)中,Timer類(lèi)主要負(fù)責(zé)計(jì)劃任務(wù)的功能,也就是在指定的時(shí)開(kāi)始執(zhí)行某一個(gè)任務(wù)。Timer類(lèi)的主要作用就是設(shè)置計(jì)劃任務(wù),但封裝任務(wù)的類(lèi)卻是TimerTask類(lèi),執(zhí)行計(jì)劃任務(wù)的代碼要放入TimerTask的子類(lèi)中,因?yàn)門(mén)imerTask是一個(gè)抽象類(lèi)。下面通過(guò)實(shí)例說(shuō)一說(shuō),如何實(shí)現(xiàn)指定時(shí)間執(zhí)行任務(wù)以及實(shí)現(xiàn)指定周期執(zhí)行任務(wù)。
在指定時(shí)間執(zhí)行
方法schedule(TimerTask,Date time),該方法的作用是在指定的日期執(zhí)行一次某一任務(wù)。
執(zhí)行任務(wù)類(lèi)MyTask

public class MyTask extends TimerTask{@Overridepublic void run() {System.out.println("任務(wù)執(zhí)行了,時(shí)間為:" + new Date());System.gc(); // 回收Timerthis.cancel(); //結(jié)束當(dāng)前線程 } }

場(chǎng)景1:執(zhí)行任務(wù)晚于當(dāng)前時(shí)間--延遲執(zhí)行

public class Test {public static void main(String[] args) {System.out.println("當(dāng)前時(shí)間為:" + new Date());Calendar calen = Calendar.getInstance();calen.add(Calendar.SECOND,5);Date runDate = calen.getTime();MyTask task = new MyTask();Timer timer = new Timer();timer.schedule(task,runDate);} }

執(zhí)行結(jié)果:

Connected to the target VM, address: '127.0.0.1:63242', transport: 'socket'

當(dāng)前時(shí)間為:Wed Nov 14 17:19:53 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:19:58 CST 2018 Disconnected from the target VM, address: '127.0.0.1:63242', transport: 'socket' Process finished with exit code 0 場(chǎng)景2:執(zhí)行任務(wù)的時(shí)間早于當(dāng)前時(shí)間--立即執(zhí)行 public class Test1 {public static void main(String[] args) {System.out.println("當(dāng)前時(shí)間為:" + new Date());Calendar calen = Calendar.getInstance();calen.add(Calendar.SECOND,-10);Date runDate = calen.getTime();MyTask task = new MyTask();Timer timer = new Timer();timer.schedule(task,runDate);} } 執(zhí)行結(jié)果: Connected to the target VM, address: '127.0.0.1:63249', transport: 'socket' 當(dāng)前時(shí)間為:Wed Nov 14 17:20:58 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:20:58 CST 2018 Disconnected from the target VM, address: '127.0.0.1:63249', transport: 'socket' Process finished with exit code 0 場(chǎng)景3:Timer中允許有多個(gè)TimerTask public class Test2 {public static void main(String[] args) {System.out.println("當(dāng)前時(shí)間為:" + new Date());Calendar calen1 = Calendar.getInstance();calen1.add(Calendar.SECOND,5);Date runDate1 = calen1.getTime();MyTask task1 = new MyTask();Calendar calen2 = Calendar.getInstance();calen2.add(Calendar.SECOND,-10);Date runDate2 = calen2.getTime();MyTask task2 = new MyTask();Timer timer = new Timer();timer.schedule(task1,runDate1);timer.schedule(task2,runDate2);} } 執(zhí)行結(jié)果: Connected to the target VM, address: '127.0.0.1:63292', transport: 'socket' 當(dāng)前時(shí)間為:Wed Nov 14 17:23:02 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:23:02 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:23:07 CST 2018 Disconnected from the target VM, address: '127.0.0.1:63292', transport: 'socket' Process finished with exit code 0

周期性執(zhí)行

方法schedule(TimerTask,Date firstTime,long period),改方法的作用是在指定的日期之后按指定的時(shí)間間隔周期,無(wú)線循環(huán)地執(zhí)行某一任務(wù)。 執(zhí)行類(lèi):MyTask1 public class MyTask1 extends TimerTask{@Overridepublic void run() {System.out.println("任務(wù)執(zhí)行了,時(shí)間為:" + new Date());} } 測(cè)試類(lèi):Test3 public class Test3 {public static void main(String[] args) {System.out.println("當(dāng)前時(shí)間為:" + new Date());Calendar calen = Calendar.getInstance();calen.add(Calendar.SECOND,5);Date runDate = calen.getTime();MyTask1 task = new MyTask1();Timer timer = new Timer();timer.schedule(task,runDate,4000);} } 執(zhí)行結(jié)果: Connected to the target VM, address: '127.0.0.1:63382', transport: 'socket' 當(dāng)前時(shí)間為:Wed Nov 14 17:35:36 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:35:41 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:35:45 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:35:49 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:35:53 CST 2018 任務(wù)執(zhí)行了,時(shí)間為:Wed Nov 14 17:35:57 CST 2018 注意: 1)TimerTask類(lèi)中的cancel()方法的做事是將自身從任務(wù)隊(duì)列中進(jìn)行清除 2)Timer類(lèi)中的cancel()方法的作用是將任務(wù)隊(duì)列中的全部任務(wù)進(jìn)行清空。

轉(zhuǎn)載于:https://www.cnblogs.com/myxcf/p/9959589.html

總結(jié)

以上是生活随笔為你收集整理的Java定时器Timer的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。