博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【外文翻译】使用Timer类去调度任务 ——java
阅读量:6702 次
发布时间:2019-06-25

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

使用Timer类去调度任务 ——java

  原文地址:https://dzone.com/articles/using-timer-class-to-schedule-tasks

  原文作者:

  很多时候我们写的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更加合适。

 

  

转载于:https://www.cnblogs.com/Jac440682/p/6792709.html

你可能感兴趣的文章
平衡二叉树与自平衡二叉树(红黑树)的区别
查看>>
读取JPG图片的Exif属性(一) - Exif信息简介
查看>>
【译文】追求生产极简主义
查看>>
FTP服务器原理(转)
查看>>
精选30道Java笔试题解答
查看>>
特殊符号 UNICODE编码
查看>>
C#图解教程 第八章 表达式和运算符
查看>>
解决NavicatPremium导入CSV文件中文乱码的问题
查看>>
Python基础:语法基础(3)
查看>>
杭电2097
查看>>
Set default value for column[转]
查看>>
个人管理:从影片《横空出世》中学到...
查看>>
WPF:从WPF Diagram Designer Part 4学习分组、对齐、排序、序列化和常用功能
查看>>
编码风格不是编码规范
查看>>
支持取消操作和暂停操作的Backgroundworker
查看>>
程序员职场-三人行,必有我师
查看>>
override与new的区别
查看>>
linux下播放mp3
查看>>
[转载]---通过一个示例,演示利用logminer,恢复delete误删除操作的数据
查看>>
UIPageControl的一个Demo
查看>>