2015年7月31日 星期五

[Java]計時器功能:Timer、TimerTask

使用定時或固定時間間隔有幾個方法
一個是Thread.sleep();

方法內填延遲的毫秒數就可以讓程式延遲後再執行

另一種就是使用Timer class
這個class的schedule方法有兩個變數以及三個變數
詳細的使用方法請見範例
範例有兩個class,將要執行的程式碼寫在繼承TimerTask的class裡面
然後使用Timer裡面你要用的方法就可以使用定時執行程式的功能了


import java.text.SimpleDateFormat;
import java.util.*;
public class TimerDemo {
 SimpleDateFormat sdf = new SimpleDateFormat("hh時mm分ss秒 yyyy年MM月dd日");
    public static void main(String[] args) {
        TimerDemo timerDemo = new TimerDemo();
        System.out.println("方法一示範");
        timerDemo.testScheduleDelay();
        System.out.println("方法二示範");
        timerDemo.testScheduleDelayAndPeriod();
        System.out.println("方法三示範");
        timerDemo.testScheduleDateAndPeriod();
   }
    
    void testScheduleDelay(){
        Timer timer = new Timer();
        System.out.println("延遲時間:3秒");
        System.out.println("現在時間:" + sdf.format(new Date()));
        // schedule(TimerTask task, long 延遲時間)
        timer.schedule(new DateTask(), 3000);
        
        try {
            Thread.sleep(10000);
        }
            catch(InterruptedException e) {
        }
        timer.cancel();
        System.out.println("結束時間:" 
            + sdf.format(new Date()) + "\n");
    }
    
    void testScheduleDelayAndPeriod(){
        Timer timer = new Timer();
        System.out.println("延遲時間:3秒, 時間間格:2秒");
        System.out.println("現在時間:" 
            + sdf.format(new Date()));
        
        // schedule(TimerTask task, long 延遲時間, long 時間間格)
        timer.schedule(new DateTask(), 3000, 2000);
       
        try {
            Thread.sleep(10000);
        }
            catch(InterruptedException e) {
        }
        timer.cancel();
        System.out.println("結束時間:" 
            + sdf.format(new Date()) + "\n");
    }
    
    void testScheduleDateAndPeriod(){
        Timer timer = new Timer();
        
        // 設定填入schedule中的 Date firstTime 為現在的15秒後
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND)+15);
        Date firstTime = calendar.getTime();     
       // 也可用 simpleDateFormat 直接設定 firstTime的精確時間
       // SimpleDateFormat dateFormatter = 
        //      new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");  
        // Date firstTime = dateFormatter.parse("2011/12/25 13:30:00");
        
        System.out.println("現在時間:" 
            + sdf.format(new Date()));
        System.out.println("設定執行 Date 為15秒後:" 
            + firstTime +", 時間間格:3秒");
                
        // schedule(TimerTask task, Date 開始時間, long 時間間格)
        timer.schedule(new DateTask(), firstTime, 3000);
                
        try {
            Thread.sleep(30000);
        }
            catch(InterruptedException e) {
        }
        timer.cancel();
        System.out.println("結束時間:" 
            + sdf.format(new Date()) + "\n");
    }
}

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;
//繼承timertask將要執行的動作覆寫在run裡面
public class DateTask extends TimerTask {
 SimpleDateFormat sdf = new SimpleDateFormat("hh時mm分ss秒 yyyy年MM月dd日");
 private int i=0;
    @ Override
    public void run() {
     i++;
        System.out.println(i+":"+ sdf.format(new Date()));
    }
}

沒有留言:

張貼留言