使用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. 【收集】sql查询统计,周,月,年

    昨天 select * from tb where datediff(day, 时间字段 ,getdate()) = 1 今天 select * from tb where datediff(day, ...

  2. cuda编程学习6——点积dot

    __shared__ float cache[threadPerBlock];//声明共享内存缓冲区,__shared__ __syncthreads();//对线程块中的线程进行同步,只有都完成前面 ...

  3. dos中进入其他盘中的方法

    1.在dos中进入其他盘中直接-->e: 即可,若是进入文件夹中-->cd aaa\bbb 即可. 2.返回上级目录:-->cd..

  4. placeholder的字体样式改变,滚动条的颜色改变,ios日期兼容

    placeholder:::-webkit-input-placeholder { color: rgba(153, 153, 153, 0.541);font-size:12px;}:-moz-pl ...

  5. iOS9,10没有问题,iOS8上面一登录就崩溃,原因Assets的问题

    在项目中开发中,打包成一个ipa的包,发现iOS9,10,运行非常流畅,iOS8上面一运行就崩溃,找了好久,才找到原因竟然是Assets的问题,一开始我把ipa包放在蒲公英上面托管扫码下载的,用iTu ...

  6. 老李分享: JSON

    老李分享: JSON    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478, ...

  7. 老李分享:接电话扩展之uiautomator 2

    主要的类就是上面的PhoneReceiver广播接收者.来电的时候,我们记录下电话号码,等该来电挂断以后,立即回拨给对方.配置文件如下: <?xml version="1.0" ...

  8. 6.Redis常用命令:Set

    在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复杂度为O(1), ...

  9. CSS3——复杂选择器

    今天把视频里的CSS3复杂选择器部分看完了,来整理一下学到的知识点. 1.兄弟选择器:同一位置级别,可称为兄弟元素 a.相邻兄弟选择器:next紧紧跟在[当前元素之后的](一个),指定选择器的元素   ...

  10. java 基础知识十 继承和多态

    java  基础知识十   继承和多态 继承 1.定义: 继承是指声明一些类,可以再进一步声明这些类的子类,而子类具有父类已经拥有的一些方法和属性,这跟现实中的父子关系是十分相似的,所以面向对象把这种 ...