java中計時器的用法Timer和TimerTask的用法__java中利用Timer與TImerTask 計時器間隔執行任務


 

      經常我們都會有這樣的需求,要固定的每隔一段時間執行某一個任務。比如:
 
  我們做一個緩存來減少與數據庫的交互,而為了使緩存與數據庫中的數據盡量達到同步,需要每個固定的一段時間去數據庫中的數據是否有更新以達到與緩存的同步。這樣的需求可以做一個線程,線程中做一個死循環,循環中就是要執行的這個任務,每執行完一次讓線程睡眠一段時間,這要就可以達到這個需求。
 
  但是用最簡單最便捷的方式是使用Java為我們提供的計時器的工具類,即Timer和TimerTask。 

      Timer是一個普通的類,其中有幾個重要的方法;而TimerTask則是一個抽象類,其中有一個抽象方法run(),類型線程中的run()方法。我們使用Timer創建一個他的對象,然后使用這對象的schedule方法來完成這種間隔的操作。
 
  schedule方法有三個參數,其中第一個參數就是TimerTask類型的對象,我們實現TimerTask的run()方法就是要周期執行的一個任務;第二個參數有兩種類型,第一種是long類型,表示多長時間后開始執行,另一種是Date類型,表示從那個時間后開始執行;而第三個參數就是執行的周期,為long類型。
 
  schedule方法還有一種兩個參數的執行重載,第一個參數仍然是TimerTask,第二個表示為long的形式表示多長時間后執行一次,為Date就表示某個時間后執行一次。 

    需要注意的是Timer就是一個線程,使用schedule方法完成對TimerTask的調度,多個TimerTask可以共用一個Timer,也就是說Timer對象調用一次schedule方法就是創建了一個線程,並且調用一次schedule后TimerTask是無限制的循環下去的,使用Timer的cancel()停止操作。當然同一個Timer執行一次cancel()方法后,所有Timer線程都被終止。 

下面是示列代碼:
 
 java.util.Timer timer = new java.util.Timer(true);     
 // true 說明這個timer以daemon方式運行(優先級低,     
 // 程序結束timer也自動結束),注意,javax.swing     
 // 包中也有一個Timer類,如果import中用到swing包,     
 // 要注意名字的沖突。     
        
TimerTask task = new TimerTask() {     
    public void run() {     
    ... //每次需要執行的代碼放到這里面。     
    }     
};     
        
//以下是幾種調度task的方法:        
timer.schedule(task, time);     
// time為Date類型:在指定時間執行一次。     
        
timer.schedule(task, firstTime, period);     
// firstTime為Date類型,period為long     
// 從firstTime時刻開始,每隔period毫秒執行一次。     
        
timer.schedule(task, delay)     
// delay 為long類型:從現在起過delay毫秒執行一次     
        
timer.schedule(task, delay, period)     
// delay為long,period為long:從現在起過delay毫秒以后,每隔period     
// 毫秒執行一次。    

 


完整的示例代碼: 
1、定制任務: 

import java.util.Timer;          
public class TimerTaskTest extends java.util.TimerTask{    
        
    @Override    
    public void run() {    
       // TODO Auto-generated method stub    
       System.out.println("start");    
    }    
}    

  



2.調用java.util.Timer : 

import java.util.Timer;          
public class Test {    
    public static void main(String[] args){    
        Timer timer = new Timer();   
        timer.schedule(new TimerTaskTest(), 1000, 2000);    
     }    
 }    

 

 

 

 

參考:http://alanlhy.iteye.com/blog/1168108


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM