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

歡迎訪問 生活随笔!

生活随笔

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

java

[ImportNew]Java中的Timer类和TimerTask类

發(fā)布時間:2025/3/21 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [ImportNew]Java中的Timer类和TimerTask类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://www.importnew.com/9978.html

java.util.Timer是一個實用工具類,該類用來調(diào)度一個線程,使它可以在將來某一時刻執(zhí)行。 Java的Timer類可以調(diào)度一個任務(wù)運行一次,或定期運行。

java.util.TimerTask是一個抽象類,它實現(xiàn)了Runnable接口。我們需要擴展該類以便創(chuàng)建自己的TimerTask,這個TimerTask內(nèi)部使用java Timer類,可以被調(diào)度。

Timer類是線程安全的,多進程不需要外部同步機制就可以共享同一個Timer對象Timer類使用java.util.TaskQueue在指定時間間隔添加任務(wù),在任何時刻只能有一個線程執(zhí)行TimerTask。例如,創(chuàng)建一個每10秒運行的Timer,但單個線程的執(zhí)行時間花費20秒,Timer對象將持續(xù)將任務(wù)添加到隊列,一旦有任務(wù)結(jié)束,它就會通知隊列,并且另外一個線程將啟動執(zhí)行

Timer類使用對象的wait和notify方法來調(diào)度任務(wù)。

如下是一個使用Timer和TimerTask的實例。

MyTimerTask.java

1 import java.util.Date; 2 import java.util.Timer;//Timer類在JDK中3個包下都有.這個是util包下的. 3 import java.util.TimerTask; 4 5 public class MyTimerTask extends TimerTask { 6 7 @Override 8 public void run() { 9 System.out.println("Timer task started at:"+new Date()); 10 completeTask();//就是讓線程睡兩秒 11 System.out.println("Timer task finished at:"+new Date()); 12 } 13 14 private void completeTask() { 15 try { 16 //assuming it takes 20 secs to complete the task 17 Thread.sleep(20000); 18 } catch (InterruptedException e) { 19 e.printStackTrace(); 20 } 21 } 22 23 public static void main(String args[]){ 24 TimerTask timerTask = new MyTimerTask(); 25 //running timer task as daemon thread 26 Timer timer = new Timer(true); 27 timer.scheduleAtFixedRate(timerTask, 0, 10*1000); 28 System.out.println("TimerTask started"); 29 //cancel after sometime 30 try { 31 Thread.sleep(120000); 32 } catch (InterruptedException e) { 33 e.printStackTrace(); 34 } 35 timer.cancel(); 36 System.out.println("TimerTask cancelled"); 37 try { 38 Thread.sleep(30000); 39 } catch (InterruptedException e) { 40 e.printStackTrace(); 41 } 42 } 43 }

輸出的結(jié)果:

TimerTask started Timer task started at:Sat Mar 07 20:39:24 CST 2015 Timer task finished at:Sat Mar 07 20:39:44 CST 2015 Timer task started at:Sat Mar 07 20:39:44 CST 2015 Timer task finished at:Sat Mar 07 20:40:04 CST 2015 Timer task started at:Sat Mar 07 20:40:04 CST 2015 Timer task finished at:Sat Mar 07 20:40:24 CST 2015 Timer task started at:Sat Mar 07 20:40:24 CST 2015 Timer task finished at:Sat Mar 07 20:40:44 CST 2015 Timer task started at:Sat Mar 07 20:40:44 CST 2015 Timer task finished at:Sat Mar 07 20:41:04 CST 2015 Timer task started at:Sat Mar 07 20:41:04 CST 2015 TimerTask cancelled Timer task finished at:Sat Mar 07 20:41:24 CST 2015

public void scheduleAtFixedRate(TimerTask?task,long?delay,long?period)安排指定的任務(wù)在指定的延遲后開始進行重復(fù)的固定速率執(zhí)行。以近似固定的時間間隔(由指定的周期分隔)進行后續(xù)執(zhí)行。?task - 所要安排的任務(wù)。delay - 執(zhí)行任務(wù)前的延遲時間,單位是毫秒。period - 執(zhí)行各后續(xù)任務(wù)之間的時間間隔,單位是毫秒。

public void cancel()終止此計時器,丟棄所有當(dāng)前已安排的任務(wù)。這不會干擾當(dāng)前正在執(zhí)行的任務(wù)(如果存在)。一旦終止了計時器,那么它的執(zhí)行線程也會終止,并且無法根據(jù)它安排更多的任務(wù)。?

注意,在此計時器調(diào)用的計時器任務(wù)的 run 方法內(nèi)調(diào)用此方法,就可以絕對確保正在執(zhí)行的任務(wù)是此計時器所執(zhí)行的最后一個任務(wù)。

可以重復(fù)調(diào)用此方法;但是第二次和后續(xù)調(diào)用無效。

輸出結(jié)果證實,如果一個任務(wù)已經(jīng)執(zhí)行,Timer將等待它執(zhí)行結(jié)束,一旦任務(wù)執(zhí)行結(jié)束,Timer對象將再次啟動隊列中的下一個任務(wù)。

Timer對象可作為一個守護線程運行相關(guān)的任務(wù)Timer的cancel()方法用于終止計時器,并丟棄待調(diào)度的任務(wù)。然而,Timer不會干擾當(dāng)前執(zhí)行的任務(wù),并且讓它執(zhí)行結(jié)束。如果計時器用于執(zhí)行守護線程,無論是否取消它,它都會等待所有用戶線程結(jié)束后終止。

Timer類包含一些sechedule()方法用于調(diào)度一個任務(wù)在指定時間運行一次或者延時之后運行。還有一些scheduleAtFixedRate()方法用于在一定間隔后周期運行任務(wù)

當(dāng)使用Timer調(diào)度任務(wù)時,必須確保時間間隔超過正常程序運行時間,否則任務(wù)隊列的大小將持續(xù)增長,最終程序?qū)o法停止。

?

總結(jié)

以上是生活随笔為你收集整理的[ImportNew]Java中的Timer类和TimerTask类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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