定时任务用Timer实现有可能出现异常,因为它是基于绝对时间而不是相对时间进行调度的。当环境的系统时间被修改后,原来的定时任务可能就不跑了。另外需要注意一点,捕获并处理定时任务的异常。如果在TimerTask里抛出了异常,那么Timer认为定时任务被取消并终止执行线程。举例:

package com.wulinfeng.concurrent;

import java.util.Timer;
import java.util.TimerTask; public class OutOfTime { public static void main(String[] args) throws InterruptedException {
Timer timer = new Timer(); // 设置一个一次性的定时任务,1秒后执行
timer.schedule(new PrintTask(), 1000); // 休眠一秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 设置一个一次性任务,间隔1秒执行
timer.schedule(new ThrowTask(), 1000); // 休眠一秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 再设置一个周期性任务,可是不会再来了
timer.schedule(new PrintTask(), 1000, 1000);
} static class PrintTask extends TimerTask { @Override
public void run() {
System.out.println("I'm coming...");
} } static class ThrowTask extends TimerTask { @Override
public void run() {
throw new RuntimeException();
} }
}

  运行结果:

I'm coming...
Exception in thread "Timer-0" java.lang.RuntimeException
at com.wulinfeng.concurrent.OutOfTime$ThrowTask.run(OutOfTime.java:50)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Exception in thread "main" java.lang.IllegalStateException: Timer already cancelled.
at java.util.Timer.sched(Timer.java:397)
at java.util.Timer.schedule(Timer.java:248)
at com.wulinfeng.concurrent.OutOfTime.main(OutOfTime.java:34)

  如果注掉这一行,那么定时任务还是会一直跑下去的

timer.schedule(new ThrowTask(), 1000);

最新文章

  1. PL/SQL 将旧表的一些字段赋值给新的表中的字段的做法
  2. flume 配置
  3. 0909 a newbeginning
  4. 快速开发之代码生成器(asp.net mvc4 + easyui + knockoutjs)
  5. 隐藏NavigationBar时的一个坑
  6. html5代码,获取地理位置
  7. echarts一个页面动态加载两张不同图表数据
  8. xcode7 打开工程错误 This Document requires xcode8.0 or later.
  9. Ubuntu 下载 & 编译 Android5.1 源码
  10. CSS引入方式的区别详解
  11. 不复杂的Autofac注入
  12. Freebie: Material Design UI Kit
  13. 再来说说Activity
  14. [BZOJ 1025] [SCOI2009] 游戏 【DP】
  15. Neo4j学习笔记(1)——使用API编写一个Hello World程序
  16. Java使用foreach遍历集合元素
  17. php学习随笔--定时触发
  18. vue绑定html的class属性的方法
  19. extern "C" 回顾
  20. centos 6.x系统升级glibc库至2.15版本的快速解决办法

热门文章

  1. SpringMVC下文件的上传与下载以及文件列表的显示
  2. MD5加密算法的java实现
  3. TCP_AIO_Server_ZC_01
  4. LeetCode第[17]题(Java):Letter Combinations of a Phone Number
  5. ActiveMQ 的管理和监控
  6. 用phpexcel插件导出excel2003
  7. Cassandra 的数据存储结构——本质是SortedMap<RowKey, SortedMap<ColumnKey, ColumnValue>>
  8. ComBox绑定枚举
  9. 【2018年全国多校算法寒假训练营练习比赛(第四场)-A】石油采集(匈牙利算法)
  10. shell编程实例1