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

Java定时任务调度工具详解之Timer篇(初级)Timer函数的综合应用

2017-12-28 16:28 561 查看

一.通过模拟两个机器人的定时行为来加深对Timer相关函数的理解。

实现两个机器人第一个机器人会隔两秒打印最近一次计划的时间,执行内容

第二个机器人会模拟往桶里倒水,知道桶里的水满为止





代码示例:

DancingRobot类

package com.vishuo.timer;

import java.text.SimpleDateFormat;
import java.util.TimerTask;

public class DancingRobot extends TimerTask{

@Override
public void run() {
// TODO Auto-generated method stub
//获取最近的一次任务执行的时间,并将其格式化
SimpleDateFormat sf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Scheduled exec time is :"+sf.format(scheduledExecutionTime()));
System.out.println("Dancing happily");
}

}


WaterRobot类

package com.vishuo.timer;

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

public class WaterRobot extends TimerTask{

private Timer timer;
//最大容量为5
private Integer buketCapacity = 0;
public WaterRobot(Timer InputTimer){
timer = InputTimer;
}
@Override
public void run() {
// TODO Auto-generated method stub
if(buketCapacity<5){
//灌水直至桶满为止
System.out.println("Add 1L water into the bucket!");
buketCapacity++;
}else{
//水满之后就停止执行
System.out.println("The number of canceled task ion timer is :"+timer.purge());
cancel();
System.out.println("The waterRobot has been aborted");
System.out.println("The number of canceled task ion timer is :"+timer.purge());
System.out.println("Current water is " + buketCapacity+"L");
//等待两秒钟,终止timer里面的所有内容
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
timer.cancel();
}

}

}


Executor演示类

package com.vishuo.timer;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;

public class Executor {

public static void main(String[] args) {
Timer timer = new Timer();
//获取当前的时间
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current time is :"+sf.format(calendar.getTime()));

DancingRobot dr = new DancingRobot();
WaterRobot wr = new WaterRobot(timer);

timer.schedule(dr, calendar.getTime(),2000);
timer.scheduleAtFixedRate(wr, calendar.getTime(), 1000);

}

}


二.Timer的缺陷

管理并发任务的缺陷:

Timer有且仅有一个线程去执行定时任务,如果存在多个任务,且任务时间过长,会导致执行效果与预期不符。

当任务抛出异常时的缺陷:

如果TimerTask抛出RuntimeException,Timer会停止所有任务的运行

Timer的使用禁区

对时效性要求较高的多任务并发作业

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