【外文翻译】使用Timer类去调度任务 ——java

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

  

上一篇:[LeetCode 229.] 求众数 II


下一篇:欧拉路径/P7711【模板】欧拉路径