Timer的异常
定时任务用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);
Timer的异常的更多相关文章
- 阿里云 ECS centos java timer进程异常/混乱......的解决方法
之前就知道timer进程长久运行容易出问题,所以一直对timer进行了很长一段时间的日志监控和数据库记录,大概观察了几个月,没发现过问题....然后就没管理了,数据库记录也没做了,昨天这问题就来了,t ...
- Linux时间子系统之四:Timer在用户和内核空间流程
用户空间应用中创建一个Timer(alarm/setitimer/POSIX Timer等等),然后程序继续执行: 内核进入创建/设置Timer系统调用,开始计时,在超时后通过何种方式通知用户空间: ...
- UEFI EVENT 全解
Event和Timer在UEFI当中是怎么实现的以及原理,我们先从Timer开始,然后细细的拨开隐藏在底层的实现. 先说Timer,那什么是Timer呢?其实在中文里面我们把它叫做定时/计数器,但是我 ...
- 深入浅出Java线程池:使用篇
前言 很高兴遇见你~ 借助于很多强大的框架,现在我们已经很少直接去管理线程,框架的内部都会为我们自动维护一个线程池.例如我们使用最多的okHttp以及他的封装框架Retrofit,线程封装框架RxJa ...
- C# System.Timers.Timer中的坑,程序异常退出后timer依然运行问题
问题背景 C#小白,由于本公司IM系统服务端(java)是本人独立开发的,加上现在所在项目需要对接IM系统,于是IM的客户端(C#实现)对接工作就交给我了.于是C#小白的我天真的以为只要调用C#端的S ...
- 关于dubbo服务产生异常之:Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer.
简单来说就是dubbo超时,因为dubbo默认的时间是500ms,超过这个时间它会重新访问service层,最多尝试三次. 所以我在测试的时候日志显示出来的异常为……timeout……. 开始设置开始 ...
- C# 程序异常管理方案
C# 程序异常管理方案 1.程序出现未处理异常(程序中未捕获异常.添加异常处理) 2.程序添加全局异常捕获 tip:程序已处理异常不在捕获范围内. /// <summary> /// 应用 ...
- Linux Kernel Oops异常分析
1.PowerPC小系统内核异常分析 1.1 异常打印 Unable to handle kernel paging request for data at address 0x36fef31eFa ...
- EJB之Timer
EJB Timer 要么: Annotation @Schedule 或者方法前声明@Timeout 要么: 在部署描述中定义timeout-method 如果是使用@Schedule, Timer在 ...
随机推荐
- how to get a controller instance in another controller
https://stackoverflow.com/questions/16870413/how-to-call-another-controller-action-from-a-controller ...
- spring data redis的使用jar包版本冲突问题
spring data redis 与spring 版本之间会有不兼容,要求spring 最低版本为4.2.6,这里推荐的一个版本 spring 4.3.2 spring data redis 1. ...
- PAT1077. Kuchiguse (20)
#include <iostream> #include <vector> #include <sstream> using namespace std; int ...
- zip无法解压
使用unzip解压,提示 [root@iZ28g3behi3Z html]# unzip /var/www/html/deyizhonggong.zipArchive: /var/www/html/ ...
- HashMap和ConcurrentHashMap和HashTable的底层原理与剖析
HashMap 可以允许key为null,value为null,但HashMap的是线程不安全的 HashMap 底层是数组 + 链表的数据结构 在jdk 1.7 中 map集合中的每一项都是一个 ...
- Memcached replace 命令
Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值). 如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED. 语法: replace ...
- spring mvc:拦截器不拦截静态资源的三种处理方式
方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...
- yii2: oralce中文,有的汉字是2个字节,有的汉字是3个字节
yii2: oralce中文,有的汉字是2个字节,有的汉字是3个字节 请用mb_substr转成1个英文字节
- Appium 自动化测试(5)-- Appium详细介绍:Appium 手机自动化测试_TesterHome公开版pdf
- 修改当前启动菜单项的HyperVisorLaunchType
switch-hyperv.bat @echo off "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\ ...