Java中建立一個線程和對線程管理不是什麼複雜的事情,但是在一個系統中一般都會有大量的定時任務,因此我們需要建立一個機制能方便的擴展各種定時任務。
首先建立基本線程BaseThread,它完成基本的線程的基本功能,包括日誌信息和狀態監控,只是間隔時間和要完成的任務不能確定,我們建立2個抽象方法:
abstract public long getInterval() throws Exception;//間隔時間
abstract public void doTask() throws Exception;//要完成的任務
我不想系統存在的線程過多,於是我把優先級不高的一些線程封裝成任務,由一個線程依次執行。
ArrayList tasks;//定時(次數)執行的任務的集合
/**
* 增加一個定時任務
* @param timerTask 定時任務
*/
public void addTimerTask(Task task){
tasks.add(task);
}
Task是一個任務接口,就一個方法:
/**
* 檢查運行
* @param ds 數據源
* @throws java.lang.Exception Exception
*/
public void runTask(DataSource ds) throws Exception;
BaseTimesTask是Task的一個基本實現,它完成基本的計次任務(循環多少次執行一次),它實現公共的部分,只留下具體執行的方法和計次的參數名由子類實現:
/**
* 運行
* @param ds 數據源
*/
abstract public void run(DataSource ds);
/**
* 取Local.properties配置文件中的參數名
* @return 參數名
*/
public String getParameterName(){
return null;//可以沒有,表示每次都執行
}
需要說明的是:run(DataSource ds)不拋出例外,必須自己處理,因爲要避免一個任務發生錯誤影響其它任務的執行。