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)。
感激閱讀,希望能協助到大家,謝謝大家對本站的支持!