日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

[ImportNew]Java中的Timer类和TimerTask类

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

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

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

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

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

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

如下是一個(gè)使用Timer和TimerTask的實(shí)例。

MyTimerTask.java

1 import java.util.Date; 2 import java.util.Timer;//Timer類在JDK中3個(gè)包下都有.這個(gè)是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ù)在指定的延遲后開始進(jìn)行重復(fù)的固定速率執(zhí)行。以近似固定的時(shí)間間隔(由指定的周期分隔)進(jìn)行后續(xù)執(zhí)行。?task - 所要安排的任務(wù)。delay - 執(zhí)行任務(wù)前的延遲時(shí)間,單位是毫秒。period - 執(zhí)行各后續(xù)任務(wù)之間的時(shí)間間隔,單位是毫秒。

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

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

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

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

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

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

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

?

總結(jié)

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

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