定時器實現方式之TimerTask、Timer

在將來某個指定的時間點或者通過一段時間延遲後執行某個事件,這時候就須要用到定時器了。定時器的實現方式有不少種,今天總結最簡單的實現方式。java 1.3引入了定時器框架,用於在定時器上下文中控制線程的執行,其由類Timer和TimerTask構成。Timer適用於大規模併發調度定時任務,在內部,該類使用二進制的堆表示其定時任務隊列。java

經過繼承TimerTask或者建立匿名類的方式重寫run()方法,建立一個定時任務,經過將其做爲第一個參數調用Timer得schedule()方法,實現定時器。併發

import java.util.Timer;
import java.util.TimerTask;

public class TimerDemo {
    // 經過建立匿名類方式實現

    public static void main(String[] args) {
        
        // 首先初始化一個TimerTask的匿名子類
        TimerTask task = new TimerTask() {
@Override
public void run() { System.out.println("開始執行"); //退出程序返回最上層,0表示正常退出程序,非0表示非正常退出程序 System.exit(0); } }; //經過Timer調用 Timer timer = new Timer(); timer.schedule(task, 2000); } }

Timer建立的定時器通常爲非線程守護,若是想要建立守護線程需調用Timer(boolean isDaemon) 傳遞參數true給isDaemon。框架

Timer類聲明的方法以下:ide

  • void schedule(TimerTask task, long delay) 在delay毫秒以後調度任務執行。
  • void schedule(TimerTask task, Date time) 在某個時間點調度任務執行。
  • void schedule(TimerTask task, long delay, long period) 在delay毫秒以後調度任務開始執行,以固定時間間隔的方式重複執行,後續將一大約period毫秒的固定時間間隔執行。
  • void schedule(TimerTask task, Date firstTime, long period) 調度任務於firstTime開始,以固定時間間隔的方式重複執行,後續將一大約period毫秒的固定時間間隔執行。
  • void scheduleAtFixedRate(TimerTask task, long delay, long period) 在delay毫秒以後,開始調度任務以固定速率的方式重複執行,後續將以大約period毫秒數的固定時間間隔執行。
  • void scheduleAtFixedRate(TimerTask task, Date firstTime,long period) 調度任務於firstTime開始,以固定速率的方式重複執行,後續將大約period毫秒數的固定時間間隔執行。spa

  • sched(TimerTask task, long time, long period) 在指定時間執行調度任務執行,以固定時間間隔的方式重複執行,後續將一大約period毫秒的固定時間間隔執行。
  • void cancel() 終止定時器,丟棄全部當前調度的定時器任務。不干涉當前正在執行的任務,能保證正在執行的任務必定是最後一個被該定時器執行的任務。
  • int purge() 從該定時器隊列中移除全部取消的定時任務而且返回被移除任務的數目。

定時任務都是抽象類TimerTask子類的實例,這些子類實現Runnable接口,當子類實例化TimerTask的時候,須要重寫其voud run()方法。線程

TimerTask類聲明的方法以下:code

  • boolean cancel()取消這個定時任務
  • long scheduledExecutionTime() 返回此定時任務最近實際被調度執行時間。

Timer的cancel()和TimerTask的TimerTask的區別在於,Timer的cancel()會終止定時器並放棄當前任意被調度的定時任務,而TimerTask的cancel()方法僅僅會取消正在調度的定時任務。blog

相關文章
相關標籤/搜索