使用Timer类去调度任务——java
来源:互联网 发布:qq风险软件下载 编辑:程序博客网 时间:2024/05/21 18:41
使用Timer类去调度任务 ——java
原文地址:https://dzone.com/articles/using-timer-class-to-schedule-tasks
原文作者:Jay Sridhar
很多时候我们写的JAVA程序需要运行一些任务。可能你想要定期清理一下资源,或者想要检查一下状态,又或者是要拿某个URL(第一次可能拿不到,需要多次尝试)。
针对上诉情况,Timer类提供了非常简单的接口用于任务调度。下面我们来看一下如何去使用。
定义你的任务
Timer类执行的任务需要继承TimerTask类。而TimerTask类是实现了Runnable接口的。这里有一个简单的继承TimerTask的例子。你只需要在run方法里实现你的代码。
public class MyTask extends TimerTask{ private String name; public MyTask(String name) { this.name = name; } public void run { System.out.println(Thread.currentThread + " executing " + this.name + " [" + new Date + "]"); }}
运行任务
之后,你需要新建一个Timer实例,如下
Timer timer = new Timer;
非常简单。这个实例会开启一个线程在后台中运行,准备去执行任何你扔进去的任务。现在我们放一个任务进去。这里我们需要执行任务的时间安排,该任务会在指定的时刻执行并完成。
timer.schedule(new MyTask("john"), new Date(new Date.getTime + 5000));
下面是结果输出:
Thread[Timer-0,5,main] executing john [Mon Apr 24 18:04:56 IST 2017]
使用Instant去创建日前
除了用上面那种笨拙的方式定义一个5秒后的时刻,你也可以用Instant类去实现。创建一个Instant类,增加5秒,之后再将它转化为Date类型。
timer.schedule(new MyTask("john"), Date.from(Instant.now.plusSeconds(5)));
重复执行任务
等等,Timer类当然不止这么点东西。Timer类也允许你重复执行某一个任务。在下面的代码中,我们每隔3秒就执行这个任务一次(比如去检查股票的行情)。
timer.schedule(new MyTask("jack"), 0, 3000);
下面的结果可以看出这个任务确实每隔3秒就执行一次
Thread[Timer-0,5,main] executing jack [Mon Apr 24 18:12:36 IST 2017]Thread[Timer-0,5,main] executing jack [Mon Apr 24 18:12:39 IST 2017]Thread[Timer-0,5,main] executing jack [Mon Apr 24 18:12:42 IST 2017]
几行代码就可以在你的应用中加入任务调度了,是不是很简洁?
延迟开始任务
如果你想重复执行任务,又想延迟一段之间开始,那怎么办呢?这种情况也是被考虑到的。下面我们定义了1秒后才开始任务,并且每隔0.5秒执行一次
timer.schedule(new MyTask("joe"), 1000, 500);
说明
Timer只是一个很简单的类,这意味着只适用于一些简单的情况。对于更加复杂的需求,比如线程池, 用ExecutorService更加合适。
- 使用Timer类去调度任务——java
- 任务调度——java.util.Timer
- JAVA 任务调度timer类
- 使用Java Timer以及quartz调度任务
- 简单的使用java Timer调度任务
- 任务调度--使用java.util.Timer实现
- 使用 Timer 进行任务调度
- java调度任务之Timer
- java定时任务调度Timer
- 在Spring中使用 Java Timer 调度任务
- Java学习之任务调度--Timer
- Java定时任务调度工具-Timer
- Java定时任务调度之Timer
- java定时任务调度工具之Timer
- java定时任务调度之Timer
- 任务调度(一)——jdk自带的Timer
- 任务调度(一)——jdk自带的Timer
- 任务调度(一)——jdk自带的Timer
- java树形结构工具类
- 转发:什么是单播、多播和广播
- 原生JavaScript移动端百度图片搜索,找工作就这么简单
- 日志分割
- C#之构造函数
- 使用Timer类去调度任务——java
- 结构模式->享元模式
- [Gym-101341B](KMP)(水)Pursuing the Happiness
- Java虚拟机学习笔记(3)——垃圾收集器
- C/C++学习(2)关于strcpy、strcat函数使用
- 功耗分析
- c++实验5——数组分离
- SpringMVC中使用bean来接收form表单提交的参数时的注意点
- ng-src 和 ng-href的妙用