怎么在java后台,写个定时任务。比如,十每分钟执行一次定时器接口。

使用Timer和ScheduledThreadPoolExecutor执行定时任务_Java_何问起
您的位置: -
使用Timer和ScheduledThreadPoolExecutor执行定时任务
Java使用Timer和ScheduledThreadPoolExecutor执行定时任务
定时任务是在指定时间执行程序,或周期性执行计划任务。Java中实现定时任务的方法有很多,主要JDK自带的一些方法以及开源程序如Qurtz。
&&Timer和TimerTask
Timer只是充当了一个执行者的角色,真正的任务逻辑是通过一个叫做TimerTask的抽象类完成的,TimerTask也是java.util包下面的类,它是一个实现了Runnable接口的抽象类,包含一个抽象方法run( )方法,需要我们自己去提供具体的业务实现。
Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。
示例代码:
public class TimerTest {
//被执行的任务必须继承TimerTask,并且实现run方法
static class MyTimerTask1 extends TimerTask {
public void run() {
System.out.println("执行当前线程"+Thread.currentThread().getName());
* Timer线程不会捕获异常,所以TimerTask抛出的未检查的异常会终止timer线程。
* 如果Timer线程中存在多个计划任务,其中一个计划任务抛出未检查的异常,则会引起整个Timer线程结束,从而导致其他计划任务无法得到继续执行。  
* Timer线程时基于绝对时间,因此计划任务对系统的时间的改变是敏感的。
* Timer是单线程,如果某个任务很耗时,可能会影响其他计划任务的执行。
* @param args
* @throws ParseException
* @throws InterruptedException
public static void main(String[] args) throws ParseException, InterruptedException {
Timer timer = new Timer();
* scheduleAtFixedRate方式
* 设定两秒后执行任务
timer.scheduleAtFixedRate(new MyTimerTask1(), );
* schedule添加Date参数
* 设定任务在执行时间执行
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date time = dateFormatter.parse(" 14:40:00");
timer.schedule(new MyTimerTask1(), time);
//启动MyTimerTask1线程后,主线程休眠五秒钟,给MyTimerTask1五秒的执行时间
Thread.sleep(5000);
//终止Timer线程
timer.cancel();
  JDK 5.0以后推荐使用ScheduledThreadPoolExecutor。关于Timer简单了解即可。
&&ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor属于Executor Framework,它除了能处理异常外,还可以以多线程方式执行定时任务。Timer类是通过单线程来执行所有的TimerTask任务的,如果一个任务的执行过程非常耗时,将会导致其他任务的时效性出现问题。而 ScheduledThreadPoolExecutor是基于线程池的多线程执行任务,不会存在这样的问题。
通过一个实例学习:
public class ScheduledThreadPoolExecutorTest {
public static void main(String[] args) {
//获得实例,并且设置它的容量为5个
ScheduledThreadPoolExecutor sExecutor=new ScheduledThreadPoolExecutor(5);
MyTask task = new MyTask();
//隔2秒后开始执行任务,并且在上一次任务开始后隔一秒再执行一次
sExecutor.scheduleWithFixedDelay(task, 2, 1, TimeUnit.SECONDS);
//隔6秒后执行一次,但只会执行一次
sExecutor.schedule(task, 6, TimeUnit.SECONDS);
* 和Timer类似,也可以直接在任务的run()方法中调用调度方法停止
* 这个方法会平滑的关闭调度器,等待所有任务结束
sExecutor.shutdown();
static class MyTask implements Runnable{
public void run() {
System.out.println("当前执行的线程"+Thread.currentThread().getName());
&&使用Qurtz
Qurtz的使用非常简单,具体的谷歌。java定时任务的实现方式
投稿:lijiao
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了java定时任务的实现方式,在应用里经常都有用到在后台跑定时任务的需求,如何进行java定时任务,本文为大家进行讲解,感兴趣的小伙伴们可以参考一下
在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,包括做些复杂的业务计算逻辑,在选择定时任务的时候,怎么能够快速实现,并且选择一种更适合自己的方式呢? 我这里把定时任务的实现收集整理了一些方法,希望可以帮到刚开始做定时任务的同学,写得不对的地方请指正。
一& Java 基本的定时任务,总结方法有三种:
1.1&& 创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果;
1.2&& 用Timer和TimerTask与第一种方法相比有如下好处:
当启动和去取消任务时可以控制
第一次执行任务时可以指定你想要的delay时间
1.3&& 用ScheduledExecutorService是从的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式,相比于上两个方法,它有以下好处:
相比于Timer的单线程,它是通过线程池的方式来执行任务的
可以很灵活的去设定第一次执行任务delay时间
提供了良好的约定,以便设定执行的时间间隔
二& Spring 定时任务,总结方式也有三种:
2.1&&& ScheduledTimerTask:& Spring的ScheduledTimerTask定义了一个定时器任务的运行周期,遗憾的是,你可以指定任务执行的频度,但你无法精确指定它何时运行,这就需要用到第二种Quartz进行任务调度;
&&&&&& 创建一个业务任务,在Spring配置文件中声明 ;
&&&&&& 在Spring 配置文件中,配置ScheduledTimerTask ,并且关联上自定义的任务实例;
&&&&&& 启动定时器,Spring的TimerFactoryBean负责启动定时任务
&2.2&&& 使用 Quartz:
&首先还是老样子定义业务逻辑任务:
在Spring中声明并且配置作业调度的触发方式
这里 Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
&第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔一段时间运行一次。
&bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"&
&property name="jobDetail" ref="myJob" /&
&property name="startDelay" value="0" /&&!-- 调度工厂实例化后,经过0秒开始执行调度 --&
&property name="repeatInterval" value="2000" /&&!-- 每2秒调度一次 --&
第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次,如上配置;
配置调度工厂
org.springframework.scheduling.quartz.SchedulerFactoryBean,代码如上;
启动你的应用即可
&2.3&& 使用 Spring-Task
&&&&&&&& Spring自带的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种:
&&&&&&&& 第一步:编写任务类;TaskJob,method job1& --代码省略
&&&&&&&& 第二步:在spring配置文件头中添加命名空间及描述
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"&
&&&&&&& 第三步:spring配置文件中设置具体的任务
&task:scheduled-tasks&
&task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/&
&/task:scheduled-tasks&
&context:component-scan base-package="com.alibaba.mytask" /&
说明:ref参数指定的即任务类,method指定的即需要运行的方法,cron及cronExpression表达式,具体写法这里不介绍了,&context:component-scan base-package="com.alibaba.mytask" /&spring扫描注解用的。
以上就是本文的全部内容,希望对大家的学习有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具用java写一个服务程序定时执行任务,该如何设计?
[问题点数:20分,结帖人xYaron]
用java写一个服务程序定时执行任务,该如何设计?
[问题点数:20分,结帖人xYaron]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2009年2月 Java大版内专家分月排行榜第三2008年11月 Java大版内专家分月排行榜第三2008年8月 Java大版内专家分月排行榜第三2008年7月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。Java实现定时任务的三种简单方法,java实现三种-android100学习网
Java实现定时任务的三种简单方法,java实现三种
Java实现定时任务的三种简单方法,java实现三种第一种方法:
* 先定义一个任务每天执行的时间点,再写一个死循环,不断地拿当前时间和事先定义的时间去比对,若到时
Java实现定时任务的三种简单方法,java实现三种
第一种方法:
* 先定义一个任务每天执行的时间点,再写一个死循环,不断地拿当前时间和事先定义的时间去比对,若到时间则执行任务
public void test1() {
String taskTime = "13:43:10";
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
while (true) {
Date date = new Date();
if (sdf.format(date).equals(taskTime)) {
System.out.println("任务开始执行!");
// 这里让线程睡眠一秒钟的原因是:若任务在1秒内执行完的话,会导致任务执行多遍,
// 任务执行完睡眠一秒钟,保证任务不会重复执行
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
第二种方法:若想测试,请一定用main方法,Test不行
* 利用ScheduledExecutorService这个接口实现
public static void main(String[] args) {
Runnable runnable = new Runnable() {
public void run() {
System.out.println("任务开始执行!");
ScheduledExecutorService sch = Executors.newSingleThreadScheduledExecutor();
// 第一个参数是要执行的线程
// 第二个参数是初始延迟时间
// 第三个参数是任务执行的间隔时间
// 第四个参数是计时单位,可以是时分秒等
sch.scheduleAtFixedRate(runnable, 10, 2, TimeUnit.SECONDS);
第三种方法:若想测试,请一定用main方法,Test不行
public static void main(String[] args) {
TimerTask task = new TimerTask() {
public void run() {
System.out.println("任务开始执行!");
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
cal.set(year, month, day, 14, 1, 0);
Date date = cal.getTime();
Timer timer = new Timer();
timer.schedule(task, date, 2000);Java:Web应用下实现定时任务的简便方法
下面,图老师小编带您去了解一下Java:Web应用下实现定时任务的简便方法,生活就是不断的发现新事物,get新技能~
  在WEB应用下实现定时任务的简便方法  在web方式下,假如我们要实现定期执行某些任务的话,除了用quartz等第三方开源工具外,我们可以使用Timer和TimeTask来完成指定的定时任务:  第一步:创建一个任务治理类,实现ServletContextListener 接口  以下是引用片段:  public class TaskManager implements ServletContextListener {  &/**  & * 天天的毫秒数  & */  &public static final long PERIOD_DAY = DateUtils.MILLIS_IN_DAY;  &/**  & * 一周内的毫秒数  & */  &public static final long PERIOD_WEEK = PERIOD_DAY * 7;  &/**  & * 无延迟  & */  &public static final long NO_DELAY = 0;  &/**  & * 定时器  & */  &private T  &/**  & * 在Web应用启动时初始化任务  & */  &public void contextInitialized(ServletContextEvent event) {  &&&&&&& //定义定时器  &&timer = new Timer("数据库表",true);   &&//启动备份任务,每月(4个星期)执行一次  &&timer.schedule(new BackUpTableTask(),NO_DELAY, PERIOD_WEEK * 4);  //&&timer.schedule(new BackUpTableTask(),NO_DELAY, 30000);  &}  &/**  & * 在Web应用结束时停止任务  & */  &public void contextDestroyed(ServletContextEvent event) {  &&timer.cancel(); // 定时器销毁  &}  }    第二步:创建一个时间任务类    以下是引用片段:  public&class&BackUpTableTask&extends&TimerTask&{   &private&static&Log&log&=&LogFactory.getLog(BackUpTableTask.class);   &private&static&boolean&isRunning&=&   &public&void&run()&{   &&if&(!isRunning)&{   &&&isRunning&=&   &&&log.debug("开始执行任务...");&//开始任务   &&&//working&&add&what&you&want&to&do   &&&log.debug("执行任务完成...");&//任务完成   &&&isRunning&=&   &&}&else&{   &&&log.debug("上一次任务执行还未结束...");&//上一次任务执行还未结束   &&}   &}   }  第三步:在web中添加一个监听器  以下是引用片段:  &listener  &&listener-class***.TaskManager/listener-class  &&description要定期执行的任务/description  &/listener  那么在web启动的时候,任务也被启动,并且会周期性的执行  &&
来源:/n/0310.html
热门搜索:
剧照风格超酷男模 PS实例教程
qq宝贝图标怎么点亮
笔记本电池保养方法
ps教程 使用PS对图片后期处理成哥特风效果
土豆丝鸡蛋饼有很高的营养价值,和外面那些简陋的鸡蛋灌饼可是不一样的哦,那些妖艳贱货怎么能和我们伟大的土豆丝鸡蛋饼相媲美,好啦,不说废话了,来看看到底土豆丝鸡蛋饼要怎么做吧。
金枪鱼三明治,吃得好,还要吃得健康!今天给大家带来的金枪鱼三明治让你吃得开心吃得放心。
香葱肉饼,香葱肉饼最正宗的做法是怎样的?韩仙佑为香葱肉饼汇集了大量最新最全的香葱肉饼的简单做发。相信大家今天就能轻松学会了。
水饺大家都吃过,那么紫薯水饺呢?紫薯水饺如何做好吃呢?接下来,介绍简单美味紫薯水饺的做法,赶紧备好材料一起来做做吧。
火影是笔者非常喜欢的一个动漫,同时火影的游戏也有很高的可玩性,对于新手玩家首先要了解火影忍者究极风暴3出招表,下面我就来教大家这款游戏里一些招式,喜欢这个游戏的玩家不妨来看看。
微信的普遍使用也让很多不法分子盗取个人隐私信息,很多人因此想要注销自己的微信号,首先需要告诉大家的是依照腾讯微信使用规定微信账号是无法注销解除的,下面我来教你怎么最大限度包含您的隐私。
清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐PS鼠绘衣橱里的怪兽详细教程,无聊中的都看过来。
炎夏烈日炎炎,就在你与阳光亲密接触时,也让紫外线有了可乘之机,有的时候,虽然你认真做了防晒的工作,却依旧没能躲过炙热的阳光,晒伤之后,要立马着手修复晒伤的肌肤,那么晒伤后怎么处理呢?下面就一起来看看吧。
脸上肉嘟嘟的女生和男生们是不是选择发型的时候很伤大脑。没关系,我们这里肯定有一款适合你的发型,本文也是大圆脸一枚,下面分享下我收集多年的圆脸女生男生发型以及学会的圆脸发型修饰技巧。
孕妇能吃西瓜吗?面对炎炎夏暑的到来,西瓜作为夏季最常见的水果之一,已经成了人们必吃的解暑水果,作为特殊人群的孕妈妈们也馋的直流口水了,那么问题来了,孕妇到底可以吃西瓜吗?下文为你详解。
如果您有什么好的建议或者疑问,可以联系我们! QQ群: QQ号: 进群、加好友,备注:图老师 小周老师一一为您解答!让我们一起学习、一起进步 版权所有 (C) 2016 All Rights Reserved. 湘ICP备号
微信公众号

我要回帖

更多关于 linux定时执行脚本 的文章

 

随机推荐