您的位置:首页 > 编程语言 > Java开发

java定时任务及对任务监视的实现

2008-11-20 23:31 471 查看
需求:最近项目中要求实现这样的功能:系统运行时有两个任务;它们各自执行的操作不同,执行的开始时间和周期也不同;
执行的开始时间和周期要求可以动态配置。如:任务一今天可以是 6点运行,周期为每2个小时启动,也可能过一些天后任务一
改为8点运行,周期为每1小时一次;任务二也有同样的需求;而且在这些改变的过程中程序要求自己判断这些参数是否改变,
如果改变,则马上按新的要求运行任务;此过程中不允许系统重起。

思路:分别建立三个时钟,也就是三个任务。任务三是时刻(每10sec扫描一次)监视配置参数是否改变,如果改变的话,则判断
新的配置种所修改的启动时间是否在今天是否已经过去,如果时间已经过去则默认为任务从明天开始执行,同时把先前的任务停止,
同时启动新的计划任务。

实现:
private Timer timer1;
private Timer timer2;
private Timer timer3;
private Task1 task1=null;
private Task2 task2=null;

public void task1Start(){
System.out.println("开始启动定时任务1.........");
task1=new Task1();
timer1.schedule(task1,开始时间,周期)
System.out.println("启动定时任务1完毕!");
System.out.println();
}

public void task2Start(){
System.out.println("开始启动定时任务2.........");
task2=new Task2();
timer2.schedule(task2,开始时间,周期)
System.out.println("启动定时任务2完毕!");
System.out.println();
}
public void task1Stop(){
System.out.println("开始停止任务1........");
task2.cancel();
System.out.println("任务1已经停止!");
}
public void task2Stop(){
System.out.println("开始停止任务2........");
task2.cancel();
System.out.println("任务2已经停止!");

}
public void task3Start(){
System.out.println("开始启动监视任务.........");
timer3.schedule(new ConfigCheckTask(),0,10 * 1000);
System.out.println("启动监视完毕!");
System.out.println();
}

class Task1 extends TimerTask {
public void run() {
//具体任务
}
}
class Task1 extends TimerTask {
public void run() {
//具体任务
}
}

class ConfigCheckTask extends TimerTask {
public void run() {
checkConfigParameter();
}
}

private void checkConfigParameter(){
FileReader fr;
try {
fr = new FileReader(getThisClassDirectory()+"jobconf.txt");
//建立BufferedReader对象,并实例化为br
BufferedReader br=new BufferedReader(fr);
//从文件读取一行字符串
String line=br.readLine();
boolean task1IsChange=false;
boolean task2IsChange=false;
while(line!=null){
line=line.trim();
int pos=line.indexOf("=");
//读取配置,然后比较是否改变,处理task1IsChange和task2IsChange的状态
task1IsChange=true;
task2IsChange=true;
line=br.readLine();
}
br.close();//关闭BufferedReader对象
fr.close();//关闭文件

if(task1IsChange){
task1Stop();
task1Start();
}
if(task2IsChange){
task2Stop();
task2Start();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: