Java 定時器(Timer,TimerTask)詳解及實例代碼。本站提示廣大學習愛好者:(Java 定時器(Timer,TimerTask)詳解及實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是Java 定時器(Timer,TimerTask)詳解及實例代碼正文
Java 定時器
在JAVA中完成定時器功用要用的二個類是Timer,TimerTask
Timer類是用來執行義務的類,它承受一個TimerTask做參數
Timer有兩種執行義務的形式,最常用的是schedule,它可以以兩種方式執行義務:1:在某個時間(Data),2:在某個固定的時間之後(int delay).這兩種方式都可以指定義務執行的頻率,本文有二個例子,一個是復雜的一個是用了外部類
1.復雜實例
先寫一個類
public class TimeTest { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new MyTask(),1000,2000); }
然後再寫個類
public class MyTask extends TimerTask{ @Override public void run() { System.out.println("開端運轉"); } }
這樣就可以完成一個復雜的定時器,但是還有一種辦法就是把這二個類寫入到一個類中,也就是外部類了
2.外部類
public class SerchRun { protected static void startRun(){ Timer timer = new Timer(); TimerTask task =new TimerTask(){ public void run(){ System.out.println("開端運轉"); //在這寫你要調用的辦法 } }; timer.scheduleAtFixedRate(task, new Date(),2000);//以後時間開端起動 每次距離2秒再啟動 // timer.scheduleAtFixedRate(task, 1000,2000); // 1秒後啟動 每次距離2秒再啟動 } public static void main(String[] args) { SerchRun.startRun(); } }
schedule和scheduleAtFixedRate的區別在於,假如指定開端執行的時間在以後零碎運轉時間之前,scheduleAtFixedRate會把曾經過來的時間也作為周期執行,而schedule不會把過來的時間算上。
比方:
SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date d1 = fTime.parse("2005/12/30 14:10:00"); t.scheduleAtFixedRate(new TimerTask(){ public void run() { System.out.println("this is task you do6"); } },d1,3*60*1000);
距離時間是3分鐘,指定開端時間是2005/12/30 14:10:00,假如我在14:17:00分執行這個順序,那麼會立即打印3次
this is task you do6 //14:10 this is task you do6 //14:13 this is task you do6 //14:16
並且留意,下一次執行是在14:19 而不是 14:20。就是說是從指定的開端時間開端計時,而不是從執行時間開端計時。
但是下面假如用schedule辦法,距離時間是3分鐘,指定開端時間是2005/12/30 14:10:00,那麼在14:17:00分執行這個順序,則立刻執行順序一次。並且下一次的執行時間是 14:20,而不是從14:10開端算的周期(14:19)。
感激閱讀,希望能協助到大家,謝謝大家對本站的支持!