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定时任务调度工具详解(2)— Timer 函数的综合应用
- Java定时任务调度工具详解之Timer篇(初级)
- Java定时任务调度工具详解之Timer篇
- Java定时任务调度工具详解之Timer
- Java定时任务调度工具详解(1)— Timer 简介
- Java定时任务调度工具Timer
- Java定时任务调度工具详解(8)— Quartz 之 quartz.properties文件
- Java定时任务调度工具详解之Quartz
- java定时任务调度工具Timer和Quartz
- Java定时任务调度工具详解之Quartz篇(中级)一:浅谈JobExecutionContext&JobDatai&浅谈Trigger
- Java定时任务调度工具详解之Quartz篇(中级)二:SimpleTrigger& CronTrigger&浅谈Scheduler&QuartzProperties文件
- Java定时任务调度工具详解(3)— Quartz 简介
- Java定时任务调度工具详解(4)— Quartz 之 Job/JobDetail/JobExecutionContext/JobDataMap
- Java定时任务调度工具详解(5)— Quartz 之 Trigger
- Java定时任务调度工具详解(7)— Quartz 之 Scheduler
- Java定时任务调度工具详解之Quartz篇
- Java定时任务调度工具详解(6)— Quartz 之 SimpleTrigger、CronTrigger、Cron表达式
- java定时任务调度工具之Timer
- Java定时任务调度工具详解之Timer篇
- Java 定时任务调度工具 Quartz(Part 1)