使用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更加合适。

0 0