Timer的异常
2024-08-26 22:01:04
定时任务用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);
最新文章
- PL/SQL 将旧表的一些字段赋值给新的表中的字段的做法
- flume 配置
- 0909 a newbeginning
- 快速开发之代码生成器(asp.net mvc4 + easyui + knockoutjs)
- 隐藏NavigationBar时的一个坑
- html5代码,获取地理位置
- echarts一个页面动态加载两张不同图表数据
- xcode7 打开工程错误 This Document requires xcode8.0 or later.
- Ubuntu 下载 &; 编译 Android5.1 源码
- CSS引入方式的区别详解
- 不复杂的Autofac注入
- Freebie: Material Design UI Kit
- 再来说说Activity
- [BZOJ 1025] [SCOI2009] 游戏 【DP】
- Neo4j学习笔记(1)——使用API编写一个Hello World程序
- Java使用foreach遍历集合元素
- php学习随笔--定时触发
- vue绑定html的class属性的方法
- extern ";C"; 回顾
- centos 6.x系统升级glibc库至2.15版本的快速解决办法
热门文章
- SpringMVC下文件的上传与下载以及文件列表的显示
- MD5加密算法的java实现
- TCP_AIO_Server_ZC_01
- LeetCode第[17]题(Java):Letter Combinations of a Phone Number
- ActiveMQ 的管理和监控
- 用phpexcel插件导出excel2003
- Cassandra 的数据存储结构——本质是SortedMap<;RowKey, SortedMap<;ColumnKey, ColumnValue>;>;
- ComBox绑定枚举
- 【2018年全国多校算法寒假训练营练习比赛(第四场)-A】石油采集(匈牙利算法)
- shell编程实例1