定时器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);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优酷IPv6改造纪实:视频行业首家拥抱下一代网络技术

阿里妹导读&#xff1a;2018年双11前&#xff0c;优酷开启了IPV6的大门。9月份PC端业务开启灰度&#xff0c;迎来首位IPV6 VIP用户后&#xff0c;优酷移动客户端也马不停蹄地加入灰度大军。从0到1&#xff0c;花了几个月&#xff1b;从10到1000&#xff0c;花了几天&#xff1b…

服务器上的文件怎么取名,给新的服务器取名你会取神马?

亲爱的谕霸们&#xff1a;本周话题 emmmm.....又一次想话题想到脑壳痛&#xff0c;忽然想到&#xff0c;要不然大家也来想一个&#xff0c;于是乎就是......噢对了&#xff0c;看到论坛的宝宝们都晒出来2018年新年历了&#xff0c;怎么能少了APP的宝宝们&#xff1f;&#xff1…

NVIDIA发布全新推理软件,开创交互式会话AI新时代!

近日&#xff0c; NVIDIA发布了一款突破性的推理软件。借助于该软件&#xff0c;全球各地的开发者都可以实现会话式AI应用&#xff0c;大幅减少推理延迟。而此前&#xff0c;巨大的推理延迟一直都是实现真正交互式互动的一大阻碍。 NVIDIA TensorRT™ 7作为NVIDIA第七代推理软件…

可应用于实际的14个NLP突破性研究成果(二)

论文摘要 尽管最近在训练高质量的句子嵌入上做出了很多的努力&#xff0c;但是大家仍然对它们所捕捉的内容缺乏了解。基于句子分类的‘Downstream’tasks通常用于评估句子表示的质量。然而任务的复杂性使得它很难推断出句子表示中出现了什么样的信息。在本文将介绍10个probing…

IDEA JDK1.8 ProGuard 混淆Maven项目代码

直接复制到pom中即可使用 <build><plugins><plugin><groupId>com.github.wvengen</groupId><artifactId>proguard-maven-plugin</artifactId><!-- <version>2.0.14</version>--><version>2.1.1</version…

可应用于实际的14个NLP突破性研究成果(三)

论文摘要 当前最先进的语义角色标记&#xff08;SRL&#xff09;使用深度神经网络&#xff0c;但没有明确的语言特征。之前的工作表明&#xff0c;抽象语法树可以显著改善SRL&#xff0c;从而提高模型准确性。在这项研究中&#xff0c;我们提出了语言学的自我关注&#xff08;…

服务器cpu虚拟插槽,服务器更换cpu插槽

服务器更换cpu插槽 内容精选换一换弹性云服务器创建成功后&#xff0c;您可以根据需求&#xff0c;修改云服务器的名称。系统支持批量修改多台弹性云服务器的名称&#xff0c;修改完成后&#xff0c;这些弹性云服务器的名称相同。登录管理控制台。单击管理控制台左上角的&#…

云+X案例展 | 民生类:贝斯平云助力500强跨国企数字化转型

本案例由贝斯平云投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。在全球化的科技进步和…

json处理最外层引号

String substring jsonMsg.substring(1, jsonMsg.length() - 1); String replace substring.replace("\\", "");

基于Alluxio系统的Spark DataFrame高效存储管理技术

介绍 越来越多的公司和组织开始将Alluxio和Spark一起部署从而简化数据管理&#xff0c;提升数据访问性能。Qunar最近将Alluxio部署在他们的生产环境中&#xff0c;从而将Spark streaming作业的平均性能提升了15倍&#xff0c;峰值甚至达到300倍左右。在未使用Alluxio之前&#…

Arthas实践--获取到Spring Context,然后为所欲为

背景 Arthas 是Alibaba开源的Java诊断工具&#xff0c;深受开发者喜爱。 https://github.com/alibaba/arthas Arthas提供了非常丰富的关于调用拦截的命令&#xff0c;比如 trace/watch/monitor/tt 。但是很多时候我们在排查问题时&#xff0c;需要更多的线索&#xff0c;并不…

$.ajax modal,使用bootstrap modal.load()加载的js,第二次modal显示的时候,js不生效?...

我想要动态加载modal内的内容(一个模版&#xff0c;里面包含加载js文件)&#xff0c;我使用load(),在modal显示的时候进行ajax加载&#xff0c;js如下&#xff1a;$(#modal).on(show.bs.modal, function (e) {$(this).load($(e.relatedTarget).data(url));});原先在页面上已经存…

云+X案例展 | 金融类:青云QingCloud助力泰康人寿云计算演进之路

本案例由荣之联投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。泰康保险泰康云平台 青…

阿里云Kubernetes容器服务上体验Knative

概述 Knative Serving是一种可缩放至零、请求驱动的计算运行环境&#xff0c;构建在 Kubernetes 和 Istio 之上&#xff0c;支持为 serverless 应用、函数提供部署与服务。Knative Serving的目标是为Kubernetes提供扩展功能&#xff0c;用于部署和运行无服务器工作负载。 下面…

Springboot2 Quartz实现JAVA定时任务的动态配置

动态配置Quartz。没接触过定时任务的同学可以先看下此篇&#xff1a;JAVA定时任务实现的几种方式 文章目录一、需求背景1. 问题现象2. 问题分析3. 解决方案二、需求背景2.1. maven依赖2.2. 创建一个任务表2.3. 实现步骤三、代码逻辑3.1. Quartz配置3.2. 启动项目&#xff0c;加…

IoT Studio + LoRa打造“又猛又持久”的智能厕所

概述 为了增加厕所使用效率&#xff0c;减少被味道“熏陶”的等待时间&#xff0c;同时也为了增加厕所的清洁效率&#xff0c;我们决定做一个非侵入式的智能厕所改造方案。它可以通过红外热释电检测每个坑位有没有人&#xff0c;在web/app上实时显示&#xff0c;方便如厕人员查…

分布式事务中间件Fescar—全局写排它锁解读

前言 一般&#xff0c;数据库事务的隔离级别会被设置成 读已提交&#xff0c;已满足业务需求&#xff0c;这样对应在Fescar中的分支&#xff08;本地&#xff09;事务的隔离级别就是 读已提交&#xff0c;那么Fescar中对于全局事务的隔离级别又是什么呢&#xff1f;如果认真阅…

萤石网络摄像头服务器稳定吗,萤石摄像头画面稳定性如何?

稳定性很好&#xff0c;体现在&#xff1a;1、C1S互联网摄像头提供400万像素的摄像头&#xff0c;拥有双向实时语音功能&#xff0c;包括内置温湿度传感器、内置备用电池以及“放大镜”功能。2、萤石爱家神器C2采用内置6块光学镜片的监控镜头&#xff0c;720P图像会保证视频画面…

GTC CHINA 2019 | 黄仁勋发表主题演讲,多项创新技术与合作全面助力 AI 加速落地

近日&#xff0c;NVIDIA 创始人兼首席执行官黄仁勋在中国苏州举办的 GTC China 大会上发表主题演讲&#xff0c;宣布多项创新技术与合作&#xff0c;并阐述了 NVIDIA 如何助力 AI 加速进入大规模应用。 GTC China 是 NVIDIA 每年在中国最重要的大会&#xff0c;今年更是吸引了 …

PMP考试必看的答题技巧分享

一. 控制答题和涂写速度 按顺序答题&#xff0c;遇到纠结题&#xff0c;按照第一印象选择&#xff0c;并标记&#xff0c;涂完200题后再回顾。 可以先在试卷上写选项&#xff0c;然后根据20题一涂&#xff0c;或者50题一涂&#xff0c;用途题的时间舒缓大脑。 端正心态&…