定时器new Timer().schedule()的使用
文章目录
- 一、基础知识
- 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()的使用相关推荐
- timer.schedule —— timer定时器的用法
Java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerT ...
- timer.schedule定时器用法
Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. schedule的意 ...
- java之定时器任务Timer用法
在项目开发中,经常会遇到需要实现一些定时操作的任务,写过很多遍了,然而每次写的时候,总是会对一些细节有所遗忘,后来想想可能是没有总结的缘故,所以今天小编就打算总结一下可能会被遗忘的小点: 1. pub ...
- java关于Timer schedule执行定时任务 1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等...
1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. private java.util.Time ...
- java timer schedule_Java Timer的使用,timer.schedule定时执行
1.概览 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个 ...
- python timer怎么用_python定时器(Timer)用法简单实例
python定时器(Timer)用法简单实例 本文实例讲述了python定时器(Timer)用法.分享给大家供大家参考.具体如下: # encoding: UTF-8 import threading ...
- java的timertask_Java 定时器(Timer,TimerTask)详解及实例代码
Java 定时器 在JAVA中实现定时器功能要用的二个类是Timer,TimerTask Timer类是用来执行任务的类,它接受一个TimerTask做参数 Timer有两种执行任务的模式,最常用的是 ...
- java timer 使用_Java Timer的使用(timer.schedule定时执行) | 学步园
Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个例程: J ...
- Java定时器(Timer)
1.介绍 Timer和TimerTask是用于在后台线程中调度任务的java util类.简单地说,TimerTask是要执行的任务,Timer是调度器. 2.调度一次性任务 2.1 指定延迟后执行 ...
最新文章
- 重型车辆盲区行为检查Behaviours – Heavy Vehicle Blind Spots
- c语言子程序return,c语言return返回到哪
- 110万开发者的福音,百度Easy DL商品检测专业版上线
- 你所不知道的库存超限做法
- hdu5256序列变换(非递减子序列)
- C#中Equals和==的比较
- bootstrap php zend,Zend Framework教程之Bootstrap类用法概述
- java jre 中导入导出证书
- 怎样快速提高新站权重收录
- 在.Net Core中使用Swagger制作接口文档
- 集合Collections,List
- 在Global Mapper中导入点的文本格式
- Linux安装及破解密码
- PowerPC技术与市场杂谈
- 大学计算机基础课都学什么,大学计算机基础课程
- vue中使用highCharts的drilldown钻取图、3D等图
- JixiPix Portrait Painter for mac(照片转油画工具)
- ArchLinux安装完成登陆时出现login incorrect错误
- Jetson nano开机自启动程序
- 视频伪原创批量处理工具 抖音短视频解去水印