使用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的更多相关文章

  1. [ImportNew]Java中的Timer类和TimerTask类

    http://www.importnew.com/9978.html java.util.Timer是一个实用工具类,该类用来调度一个线程,使它可以在将来某一时刻执行. Java的Timer类可以调度 ...

  2. Java学习笔记 -- Java定时调度工具Timer类

    1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...

  3. java swing中Timer类的学习

    最近在完成学校课程的java平时作业,要实现一个计时器,包含开始.暂停以及重置三个功能.由于老师规定要用这个timer类,也就去学习了一下,顺便记录一下. 首先呢去查了一下java手册上的东西,发现t ...

  4. java之 Timer 类的简单使用案例

              (如果您看到本文章务必看结尾!) 第一次用Timer类,记录一下个人理解. 场景:做苹果内容结果验证时,根据苹果支付凭证去苹果官方服务器验证是否支付成功.但因为苹果服务器比较慢,第 ...

  5. C#的timer类

    在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Threading.Timer类里 3.定义在System.Timers.Timer类里 S ...

  6. C# 多线程九之Timer类

    1.简介 相信写过定时任务的小伙伴都知道这个类,非常的轻量级,而且FCL中大量的类使用了这个方法,比如CancellationTokenSource的CancelAfter就是用Timer去做的. 当 ...

  7. 给System.Timer类的Elapsed事件加锁

    背景: 最近在做一个项目,程序是命令行程序,在主程序中开一个线程,这个线程用到了System.Timer类的Elapsed事件,根据指定时间间隔循环去查询数据库,找符合条件的记录,把记录组织成xml对 ...

  8. 定时器:Timer:System.Threading.Timer类(转)

    最近的一个项目有一些地方需要用到定时功能,在设计过程中,突然发现.net的Timer类居然还有很多我以前没有用过的功能,这里就跟大家分享一下 注:这里的Timer类特指System.Threading ...

  9. 什么是 Java Timer 类?如何创建一个有特定时间间隔的任务?

    java.util.Timer 是一个工具类,可以用于安排一个线程在未来的某个特定时间执 行.Timer 类可以用安排一次性任务或者周期任务. java.util.TimerTask 是一个实现了 R ...

随机推荐

  1. rip路由协议 细节分析及实例配置【完整版】

    rip路由协议 细节分析及实例配置[完整版] RIP呢,这是一个比较重要的知识点,所以它的知识覆盖面很广泛:但是呢,我将会对碰到的问题进行一些分析解刨(主要是为了帮助自己理清思维):也希望能够从中发现 ...

  2. Java程序员应当知道的10个面向对象设计原则

    面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注 ...

  3. [UWP]了解模板化控件(2):模仿ContentControl

    ContentControl是最简单的TemplatedControl,而且它在UWP出场频率很高.ContentControl和Panel是VisualTree的基础,可以说几乎所有VisualTr ...

  4. vueJS 获取后台数据 绑定data

    //vue 环境安装http://blog.csdn.net/u013182762/article/details/53021374 一开始使用安装环境配置一些东西 ,后来发现太麻烦了 .  直接CD ...

  5. 疑问:Spring中构造器、init-method、@PostConstruct、afterPropertiesSet孰先孰后,自动注入发生时间

    问题:今天想写一个通用点的方法,根据传入的参数的类型(clazz对象),判断使用哪个mapper来插入mysql数据库. 下面是我的写法: public interface BizNeeqCommon ...

  6. java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

    下面是我查询数据库时打印出来的异常信息: ### Error querying database.  Cause: java.sql.SQLException: Value '0000-00-00 0 ...

  7. Oracle14~23

    14.查询所有学生的Sname.Cno和Degree列. 15.查询所有学生的Sno.Cname和Degree列. 16.查询所有学生的Sname.Cname和Degree列. 17. 查询“9503 ...

  8. Maven项目搭建(三):Maven直接部署项目

    上一章给大家讲解了如何使用Maven搭建SSM框架项目.   这次给大家介绍一下怎么使用Maven直接部署项目.   Maven直接部署项目  1.新建系统变量CATALINA_HOME,值为:Tom ...

  9. 细说OC中的load和initialize方法

    OC中有两个特殊的类方法,分别是load和initialize.本文总结一下这两个方法的区别于联系.使用场景和注意事项.Demo可以在我的Github上找到--load和initialize,如果觉得 ...

  10. java 基础知识六 字符串1

    java  基础知识六  字符串1 String 不是java的基本数据类型 String 不是java的基本数据类型 String 不是java的基本数据类型 字符串是是一个字符序列 1.创建 创建 ...