文章目录

  • 一、基础知识
    • 1. 简介
    • 2. 常用API
  • 二、需求案例
    • 2.1. 案例1
    • 2.2. 案例2
    • 2.3. 案例3
  • 三、场景案例
    • 3.1. 在特定时间执行任务,只执行一次
    • 3.2. 指定第一次执行的时间,然后按照间隔时间,重复执行

在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作。这时候我们就要去设置个定时器,Java中最方便、最高效的实现方式是用java.util.Timer工具类,再通过调度java.util.TimerTask任务。

一、基础知识
1. 简介

Timer是一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。实际上是个线程,定时调度所拥有的TimerTasks。
TimerTask是一个抽象类,它的子类由 Timer 安排为一次执行或重复执行的任务。实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内。

2. 常用API
//以下是几种常用调度task的方法:   timer.schedule(task, time);
// time为Date类型:在指定时间执行一次。   timer.schedule(task, firstTime, period);
// firstTime为Date类型,period为long
// 从firstTime时刻开始,每隔period毫秒执行一次。   timer.schedule(task, delay)
// delay 为long类型:从现在起过delay毫秒执行一次   timer.schedule(task, delay, period)
// delay为long,period为long:从现在起过delay毫秒以后,每隔period
// 毫秒执行一次。
二、需求案例
2.1. 案例1
每天定时12:00执行操作,延迟3分钟后再执行

第1步:写一个处理类,使用timer.schedule(task, firstTime, period);api

package com.gblfy.test;import java.util.Calendar;
import java.util.Date;
import java.util.Timer;public class G  {/*** 每天定时12:00执行操作,延迟3分钟后再执行*/public void timer(){Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, 12);//控制小时calendar.set(Calendar.MINUTE, 0);//控制分钟calendar.set(Calendar.SECOND, 0);//控制秒Date time = calendar.getTime();//执行任务时间为12:00:00Timer timer = new Timer();timer.schedule(new TimerTaskTest2(),60 * 3 * 1000);}
}

第2步:写一个类extends TimerTask实现run方法,在方法内部写需要执行的代码

package com.gblfy.test;import java.util.TimerTask;public class TimerTaskTest2 extends TimerTask {@Overridepublic void run() {System.out.println("... //每次需要执行的代码放到这里面");}
}

另一种形式不是输出一句话而是在run方法内部调用一个自定义方法

package com.gblfy.test;import java.util.TimerTask;public class TimerTaskTest2 extends TimerTask {@Overridepublic void run() {System.out.println("... //每次需要执行的代码放到这里面");Submit();}private void Submit() {System.out.println("-------------自定义方法-------------");}
}
2.2. 案例2
每天定时12:00执行操作,延迟3分钟后再执行,但是,我需要传参怎样办?

第1步:

package com.gblfy.test;import java.util.Calendar;
import java.util.Date;
import java.util.Timer;public class A {public void timer(String tokenNo) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, 12);//控制小时calendar.set(Calendar.MINUTE, 0);//控制分钟calendar.set(Calendar.SECOND, 0);//控制秒Date time = calendar.getTime();//执行任务时间为12:00:00Timer timer = new Timer();//每天定时12:00执行操作,延迟3分钟后再执行// timer.schedule(new TimerTaskTest(tokenNo),time,60 * 3 * 1000);// timer.schedule(new TimerTaskTest(tokenNo),60 * 3 * 1000);timer.schedule(new TimerTaskTest(tokenNo), 1 * 1000);}public static void main(String[] args) {A a = new A();String tokenNo="123";a.timer(tokenNo);}
}

第2步:

package com.gblfy.test;import java.util.TimerTask;public class TimerTaskTest extends TimerTask {private String tokenNo;public TimerTaskTest(String tokenNo) {this.tokenNo = tokenNo;}/*** 此计时器任务要执行的操作。*/@Overridepublic void run() {Submit(tokenNo);System.out.println("-------30分钟之后执行指定时间time执行--------");}public void Submit(String tokenNo) {System.out.println("1111111111"+tokenNo);}
}
2.3. 案例3
延迟3分钟后再执行,但是,我需要传参怎样办?

只需要烧写一个参数即可

 // timer.schedule(new TimerTaskTest(tokenNo),60 * 3 * 1000);

为了方便测试可以写成3秒

 timer.schedule(new TimerTaskTest(tokenNo), 3 * 1000);
三、场景案例
3.1. 在特定时间执行任务,只执行一次
package com.gblfy.test;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;public class TimerTime {/*** <p>* 1.停止timer* timer.cancel();* 2.在特定时间执行任务,只执行一次* public void schedule(TimerTask task,Date time)* </p>** @param args* @throws Exception*/public static void main(String[] args) throws Exception {new TimerTime().new Time().start();}// 时间格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");// 要执行的时间参数Date dateTime = new Date("2016/8/13 10:56:00");// 内部类继承线程 ,创建一个新线程。class Time extends Thread {@Overridepublic void run() {final Timer timer = new Timer();timer.schedule(new TimerTask() {// 重写run方法@Overridepublic void run() {System.out.println("I am a cat");timer.cancel();}}, dateTime);}}
}
3.2. 指定第一次执行的时间,然后按照间隔时间,重复执行
package com.gblfy.test;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;public class TimerTime {/*** <p>* 1.停止timer* timer.cancel();* 2.在特定时间执行任务,只执行一次* public void schedule(TimerTask task,Date time)* </p>** @param args* @throws Exception*/public static void main(String[] args) throws Exception {new TimerTime().new Time().start();}// 时间格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");// 要执行的时间参数Date dateTime = new Date("2016/8/13 10:56:00");// 内部类继承线程 ,创建一个新线程。class Time extends Thread {@Overridepublic void run() {final Timer timer = new Timer();timer.schedule(new TimerTask() {// 重写run方法@Overridepublic void run() {System.out.println("I am a cat");timer.cancel();}}, dateTime);}}/*** 指定第一次执行的时间,然后按照间隔时间,重复执行* public void schedule(TimerTask task,Date firstTime,long period)** @param task* @param firstTime* @param period*/public void schedule(TimerTask task, Date firstTime, long period)// 示例:// 参照上面的代码,多传一个时间间隔参数,period单位毫秒class Time2 extends Thread {@Overridepublic void run() {final Timer timer = new Timer();timer.schedule(new TimerTask() {// 重写run方法@Overridepublic void run() {System.out.println("I am a cat");timer.cancel();}}, dateTime,1000 * 1);}}
}

定时器new Timer().schedule()的使用相关推荐

  1. timer.schedule —— timer定时器的用法

    Java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerT ...

  2. timer.schedule定时器用法

    Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. schedule的意 ...

  3. java之定时器任务Timer用法

    在项目开发中,经常会遇到需要实现一些定时操作的任务,写过很多遍了,然而每次写的时候,总是会对一些细节有所遗忘,后来想想可能是没有总结的缘故,所以今天小编就打算总结一下可能会被遗忘的小点: 1. pub ...

  4. java关于Timer schedule执行定时任务 1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等...

    1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. private java.util.Time ...

  5. java timer schedule_Java Timer的使用,timer.schedule定时执行

    1.概览 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个 ...

  6. python timer怎么用_python定时器(Timer)用法简单实例

    python定时器(Timer)用法简单实例 本文实例讲述了python定时器(Timer)用法.分享给大家供大家参考.具体如下: # encoding: UTF-8 import threading ...

  7. java的timertask_Java 定时器(Timer,TimerTask)详解及实例代码

    Java 定时器 在JAVA中实现定时器功能要用的二个类是Timer,TimerTask Timer类是用来执行任务的类,它接受一个TimerTask做参数 Timer有两种执行任务的模式,最常用的是 ...

  8. java timer 使用_Java Timer的使用(timer.schedule定时执行) | 学步园

    Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个例程: J ...

  9. Java定时器(Timer)

    1.介绍 Timer和TimerTask是用于在后台线程中调度任务的java util类.简单地说,TimerTask是要执行的任务,Timer是调度器. 2.调度一次性任务 2.1 指定延迟后执行 ...

最新文章

  1. 重型车辆盲区行为检查Behaviours – Heavy Vehicle Blind Spots
  2. c语言子程序return,c语言return返回到哪
  3. 110万开发者的福音,百度Easy DL商品检测专业版上线
  4. 你所不知道的库存超限做法
  5. hdu5256序列变换(非递减子序列)
  6. C#中Equals和==的比较
  7. bootstrap php zend,Zend Framework教程之Bootstrap类用法概述
  8. java jre 中导入导出证书
  9. 怎样快速提高新站权重收录
  10. 在.Net Core中使用Swagger制作接口文档
  11. 集合Collections,List
  12. 在Global Mapper中导入点的文本格式
  13. Linux安装及破解密码
  14. PowerPC技术与市场杂谈
  15. 大学计算机基础课都学什么,大学计算机基础课程
  16. vue中使用highCharts的drilldown钻取图、3D等图
  17. JixiPix Portrait Painter for mac(照片转油画工具)
  18. ArchLinux安装完成登陆时出现login incorrect错误
  19. Jetson nano开机自启动程序
  20. 视频伪原创批量处理工具 抖音短视频解去水印

热门文章

  1. 华为5G英国首秀,BBC主持人震惊了!到底网速有多快?
  2. 200多位大牛!2019两院院士拟推荐候选人最新名单
  3. 转载:tcpdump抓包和Wireshark解包
  4. 查询数据库每天更新的数量
  5. HBase BlockCache系列 - 探求BlockCache实现机制
  6. 10个Bug环环相扣,你能解开几个?
  7. 轻松构建基于 Serverless 架构的弹性高可用视频处理系统
  8. 一文读懂架构整洁之道(附知识脉络图)
  9. mysql innodb索引原理
  10. 阿里云IoT将举办第三届极客创新挑战赛,吸引全球极客参赛