博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Timer 与ScheduledExecutorService 的使用和区别
阅读量:6379 次
发布时间:2019-06-23

本文共 1662 字,大约阅读时间需要 5 分钟。

hot3.png

Timer和ScheduledExecutorService都可以用来做定时任务,有管理任务延迟执行("如1000ms后执行任务")以及周期性执行("如每500ms执行一次该任务")。但至从JDK1.5之后,建议采用ScheduledExecutorService。

原因如下:

1.Timer对调度的支持是基于绝对时间,而不是相对时间的,由此任务对系统时钟的改变是敏感的;但ScheduledThreadExecutor只支持相对时间。

2.如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以 TimerTask抛出的未检查的异常会终止timer线程。此时,已经被安排但尚未执行的TimerTask永远不会再执行了,新的任务也不能被调度了。

3.Timer里面的任务如果执行时间太长,会独占Timer对象,使得后面的任务无法几时的执行 ,ScheduledExecutorService不会出现Timer的问题(除非你只搞一个单线程池的任务区)。

Timer:

public class TimerTest {      private static final Timer timer1 = new Timer(true);             public static void main(String[] args) {          timer1.schedule(new TimerTask(){              @Override              public void run() {                  System.out.println("执行定时任务...");              }          }, 0, 60000*1);      }  }

ScheduledExecutorService:

public class ScheduleExecutor {     private final ScheduledExecutorService scheduler =         Executors.newScheduledThreadPool(1);       public void beepForMin() {          final ScheduledFuture
beeperHandle = scheduler.scheduleAtFixedRate( new Runnable() { public void run() { System.out.println("执行。。。"); } }, 0, 10, SECONDS); scheduler.schedule(new Runnable() { public void run() { beeperHandle.cancel(true); System.exit(0); } }, 30, SECONDS); } public static void main(String[] args) { ScheduleExecutor se = new ScheduleExecutor(); se.beepForMin(); } }

 

转载于:https://my.oschina.net/discussjava/blog/832148

你可能感兴趣的文章
Java反射机制的使用(全)
查看>>
python 装饰器
查看>>
手机端布局,rem布局动态获取根字体大小
查看>>
navicat 连接Oracle 报错:Cannot load OCI DLL, 126
查看>>
5090 众数
查看>>
带你认识spark安装包的目录结构
查看>>
openssl转换各种证书的语法收集
查看>>
QML之使用Loader加载QML组件
查看>>
UML基本架构建模--类的辅助信息
查看>>
Spring Cloud与分布式系统
查看>>
[转]lua数据结构--闭包
查看>>
设计模式
查看>>
error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义
查看>>
TP视图命名规则之一
查看>>
Android解析WindowManager(二)Window的属性
查看>>
Spark RDD API具体解释(一) Map和Reduce
查看>>
Python爬糗百热门20条并邮件分发+wxPython简易GUI+py2app转成可运行文件
查看>>
深入理解 JBoss 7/WildFly Domain 模式启动过程
查看>>
转载 Servlet3 的 @WebServlet http://www.cnblogs.com/luxh/archive/2012/06/06/2537458.html
查看>>
使用Selenium+PhantomJS实现网页内容加载(包括网页后期Ajax出来的结果)
查看>>