//实现跳舞机器人一直跳舞,倒水机器人一直倒水到水中,水满后倒水机器人停止倒水,跳舞机器人在水倒满两秒后停止跳舞
///跳舞机器人
package com.imooc.timer;
import java.text.SimpleDateFormat;
import java.util.TimerTask;
public class DancingRobot extends TimerTask{
@Override
public void run() {
// 获取最近的一次任务执行的时间,并将其格式化
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!");
}
}
//倒水机器人
package com.imooc.timer;
import java.util.Timer;
import java.util.TimerTask;
public class WaterRobot extends TimerTask{
//timer
private Timer timer;
//最大水容量是5L
private Integer bucketCapcity = 0;
public WaterRobot(Timer inputTimer)
{
timer = inputTimer;
}
//业务线程
@Override
public void run() {
//灌水直至桶满为止
if(bucketCapcity<5){
System.out.println("Add 1L water into the bucket!");
bucketCapcity++;
}else{
//水满后就停止业务线程
cancel();
System.out.println("The waterRobot has been aborted");
//等待两秒钟,终止timer里面的所有内容
try {
//等待两秒钟停止所有的定时任务
Thread.sleep(2000);
} catch (Exception e) {
e.getStackTrace();
}
//停止定时器的所有定时任务
timer.cancel();
}
}
}
//执行器
//Executor
package com.imooc.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);
}
}
1.scheduledExecutionTime() 任务的该方法返回系统预计执行的时间
2.timer.purge() 从此计时器timer的任务队列中移除所有已经取消的任务 返回队列中移除的任务数;
3.timer.canel() 终止此计时器
4.task.cancel() 终止此任务的执行
5.timer的缺点 管理并发任务的缺陷,只能一个定时任务执行完成之后再去执行另一个定时任务;
另一个就是 对异常处理的缺陷 当一个定时任务出现异常之后 ,其他的所有定时任务都会挂掉