java 停止定时器_实例助解java定时器设置及停止的方法
在开发工作中,我们常常会需要一些周期性的操作,比如每5分钟执行一次某个程序,又比如定时检查数据库连接池中的连接数,每晚定时备份数据等等,在java中,最方便、最高效的实现方式就是用java.util.Timer工具类,再通过调度java.util.TimerTask任务,不过,使用这种方式虽然可以让你的程序按照某一个频度执行,但不能在指定时间运行。下面就具体了解一下java定时器设置的几种常用方法及使其停止的方法。
java.util.Timer和java.util.TimerTask基本介绍:
Timer是一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。实际上是个线程,定时调度所拥有的TimerTasks。
TimerTask是一个抽象类,它的子类由 Timer 安排为一次执行或重复执行的任务。实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内。
java定时任务的基本方法:
1、创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果;
2、用Timer和TimerTask与第一种方法相比有如下好处:
当启动和去取消任务时可以控制
第一次执行任务时可以指定你想要的delay时间
3、用ScheduledExecutorService是从的java.util.concurrent里做为并发工具类被引进的,这是最理想的定时任务实现方式,相比于上两个方法,它有以下好处:
相比于Timer的单线程,它是通过线程池的方式来执行任务的
可以很灵活的去设定第一次执行任务delay时间
提供了良好的约定,以便设定执行的时间间隔
4、基于spring框架的定时任务来实现:
可以使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行。
从作业类的继承方式来讲,可以分为两类:
作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。
作业类即普通的java类,不需要继承自任何基类。
注:比较推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待。
从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:
每隔指定时间则触发一次,在Quartz中对应的触发器为:org.springframework.scheduling.quartz.SimpleTriggerBean
每到指定时间则触发一次,在Quartz中对应的调度器为:org.springframework.scheduling.quartz.CronTriggerBean
注:并非每种任务都可以使用这两种触发器,如java.util.TimerTask任务就只能使用第一种。Quartz和spring task都可以支持这两种触发条件。
用法说明:
第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。
第一步:定义作业类
Java代码
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public classJob1extendsQuartzJobBean{
private int timeout;
private static int i = 0;
//调度工厂实例化后,经过timeout时间开始执行调度
publicvoidsetTimeout(inttimeout){
this.timeout = timeout;
}
/**
* 要调度的具体任务
*/
@Override
protectedvoidexecuteInternal(JobExecutionContext context)throwsJobExecutionException{
System.out.println("定时任务执行中…");
}
}
第二步:spring配置文件中配置作业类JobDetailBean
Xml代码
说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,jobClass属性即我们在java代码中定义的任务类,jobDataAsMap属性即该任务类中需要注入的属性值。
第三步:配置作业调度的触发方式(触发器)
Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。
配置方式如下:
Xml代码
第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。
配置方式如下:
Xml代码
关于cronExpression表达式的语法参见附录。第四步:配置调度工厂
Xml代码
说明:该参数指定的就是之前配置的触发器的名字。
第五步:启动你的应用即可,即将工程部署至tomcat或其他容器。
第二种,作业类不继承特定基类。
Spring能够支持这种方式,归功于两个类:
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,我们的任务类不再需要继承自任何类,而是普通的pojo。
第一步:编写任务类
Java代码public classJob2{
publicvoiddoJob2(){
System.out.println("不继承QuartzJobBean方式-调度进行中...");
}
}
可以看出,这就是一个普通的类,并且有一个方法。
第二步:配置作业类
Xml代码
说明:这一步是关键步骤,声明一个MethodInvokingJobDetailFactoryBean,有两个关键属性:targetObject指定任务类,targetMethod指定运行的方法。往下的步骤就与方法一相同了,为了完整,同样贴出。
第三步:配置作业调度的触发方式(触发器)
Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。
配置方式如下:
Xml代码
第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。
配置方式如下:
Xml代码
java 停止定时器_实例助解java定时器设置及停止的方法相关推荐
- Java 包分布_实例详解Java编程实现beta分布的采样或抽样
Java编程实现beta分布的采样或抽样实例代码 本文研究的主要是Java编程实现beta分布的采样或抽样,具体如下. 本文将使用math3提供的工具包,对beta分布进行采样.如下程序是对alpha ...
- java 状态设计模式_实例讲解:Java中的状态设计模式
Java中的状态设计模式是一种软件设计模式,当对象的内部状态更改时,该模式允许对象更改其行为.状态设计模式通常用于以下情况:对象取决于其状态,并且在运行期间必须根据其内部状态更改其行为.状态设计模式是 ...
- java音频解析_实例解析使用Java实现基本的音频播放器的编写要点
Java音频播放,因为必须依赖到本地环境,所以JAVA在音频处理方面优势不大,或者说打从Java体系开发时就没太多的考虑音频播放因素,要知道最早的Java 1.1版本中,没有后来的javax.soun ...
- tcp网络通信教程 java_基于java TCP网络通信的实例详解
JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数 ...
- Java并发编程最佳实例详解系列
Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...
- java 摄像头 win7_Win7系统下JAVA摄像头调用_实例代码介绍
Win7系统下JAVA摄像头调用_实例代码介绍.由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceManager.g ...
- sort函数怎么用mysql_实例详解sort()函数的原理和使用方法
本文主要为大家分享一篇实例详解sort()函数的原理和使用方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,希望能帮助到大家. sort()方法就是对数组按照一定的条件进行排序. ...
- java中将json字符串_Java中JSON字符串与java对象的互换实例详解
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- java 委托机制_通过反射实现Java下的委托机制代码详解
简述 一直对Java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块API public Class Delegater()//空参构造,该类管理委托实例并 ...
最新文章
- get 和 post
- 从 0 开始手写一个 Mybatis 框架,三步搞定!
- 二叉树(BST)之创建二叉搜索树
- 如何兼容自训练与预训练:更高效的半监督文本分类模型
- #1419 : 后缀数组四·重复旋律4 (重复次数最多的连续字串)
- 单调队列优化和决策单调性优化
- 5 操作系统第二章 进程管理 线程介绍
- SpringSecurity + JWT实现单点登录
- 根据大小分割大文本_值得一看的文本检测方法
- linux下如何查看某个容器的详细信息?
- java自动排序_java中的自动排序集合 ---- 20160809
- SVN汉化包安装方法
- sql盲注 解决_sql盲注学习笔记
- 搭建一个简单的Pascal脚本开发环境
- Excel怎么对比两个表格数据
- 北京冬奥会交通临时管理措施发布:春节前调休工作日限行
- M3DGIS三维电子沙盘开发教程第52课无人机倾斜摄影全景三维建模
- 软件测试基础+微信小程序测试实战
- 假装写在了开头qwq
- uniapp中使用第三方百度地图
热门文章
- Web安全通讯之Token与JWT
- 为什么要避免大事务以及大事务如何解决?
- iOS FMDB有返回结果集和无返回结果集
- Vue 全站缓存之 vue-router-then :前后页数据传递
- Android 存储
- 盗梦空间http://acm.nyist.net/JudgeOnline/problem.php?pid=125
- python100题语感练习_Python 100题练习8
- Picture exceed the maximum allowable rotation range
- Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK
- 实现子元素在父元素中水平垂直都居中笔记