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)不抛出例外,必须自己处理,因为要避免一个任务发生错误影响其它任务的执行。