JDK TimerTask任务使用
2016-05-10 15:58
387 查看
@Component public class TaskTest extends TimerTask{ JdbcTemplate jdbcTemplate = null; TaskManager taskManager = null; static Logger logger = Logger.getLogger(TaskTest .class); public void run(){ //初始化 if(null == jdbcTemplate){ jdbcTemplate = (JdbcTemplate) BeanFactoryUtils.getBean("jdbcTemplate"); taskManager= (TaskManager ) BeanFactoryUtils.getBean("taskManagerImpl"); } if(taskManager!= null){ //更新状态 taskManager.updateTaskState(null,-1); //发送预警及报警短信 taskManager.alarmCheck(null); } } }
1. Timer和TimerTask
Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。
TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。
2、反复执行一个任务
通过调用三个参数的schedule方法实现,最后一个参数是执行间隔,单位毫秒。
3、 schedule VS. scheduleAtFixedRate
这两个方法都是任务调度方法,他们之间区别是,schedule会保证任务的间隔是按照定义的period参数严格执行的,如果某一次调度时间比较长,那么后面的时间会顺延,保证调度间隔都是period,而scheduleAtFixedRate是严格按照调度时间来的,如果某次调度时间太长了,那么会通过缩短间隔的方式保证下一次调度在预定时间执行。举个栗子:你每个3秒调度一次,那么正常就是0,3,6,9s这样的时间,如果第二次调度花了2s的时间,如果是schedule,就会变成0,3+2,8,11这样的时间,保证间隔,而scheduleAtFixedRate就会变成0,3+2,6,9,压缩间隔,保证调度时间。
相关文章推荐
- JAVA中字符串比较equals()和equalsIgnoreCase()的区别
- java Map练习-获取字符串中字母出现次数(TreeMap实现)
- 为什么java的main方法是public static void
- c标签
- java动态代理(JDK和cglib)
- Spring的BeanFactoryPostProcessor和BeanPostProcessor
- java Map-HashMap、TreeMap练习
- 引用类型——Java数组
- Java 类加载与初始化
- java操作Properties
- Ubuntu下Java开发环境搭建
- Java_io体系之CharArrayReader、CharArrayWriter简介
- 配置struts2 默认欢迎页的几种办法:
- SpringMVC 学习-如何搭配使用 Velocity 页面模板
- 深入理解java中的ArrayList和LinkedList
- springmvc处理静态数据无法获取问题
- Spring中@Transactional事务回滚(含实例详细讲解,附源码)
- Java集合类详解
- JAVA中用二分法实现数组中的数据调换
- 集群批量安装jdk