没有合适的资源?快使用搜索试试~ 我知道了~
几种任务调度的用法
4星 · 超过85%的资源 需积分: 11 3 下载量 109 浏览量
2012-07-17
10:20:17
上传
评论
收藏 215KB DOC 举报
温馨提示
试读
28页
java 、javaweb 几种任务调度
资源详情
资源评论
资源推荐
技术主题
文档库
几种任务调度的 Java 实现方法与比较
张 静软件工程师
王 启荣软件工程师
简介: 综观目前的 应用,多数应用都具备任务调度的功能。本文由浅入
深介绍了几种任务调度的 实现方法,包括 ,
以及 ,并对其优缺点进行比较,目的在于给需要开发任务调度的程
序员提供有价值的参考。
前言
任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。
本文由浅入深介绍四种任务调度的 实现:
!"
开源工具包
开源工具包
此外,为结合实现复杂的任务调度,本文还将介绍 的一些使用方法。
相信大家都已经非常熟悉 #$$了,它是最简单的一种实现任务调
度的方法,下面给出一个具体的例子:
清单 1. 使用 Timer 进行任务调度
$$%
#$$%
#$$%
"&
#'())%
*#'+&
*+%
$#'(#'%
,
-.
*+&
$$*)")/#'+%
,
*01+&
(2*+%
3(343555%
3(3555%
66从现在开始 3秒钟之后,每隔 3秒钟执行一次 #3
$*2*)#3)+33+%
7(743555%
7(7555%
66从现在开始 7秒钟之后,每隔 7秒钟执行一次 #7
$*2*)#7)+77+%
,
,
.8
"#3
"#3
"#7
"#3
"#3
"#7
使用 实现任务调度的核心类是 和 。其中 负
责设定 的起始与间隔执行时间。使用者只需要创建一个
的继承类,实现自己的 方法,然后将其丢给 去执行即
可。
的设计核心是一个 9和一个 。将接收到的
任务丢到自己的 9中,9按照 的最初执行时间进行排序。
在创建 时会启动成为一个守护线程。这个线程会轮询所
有任务,找到一个最近要执行的任务,然后休眠,当到达最近要执行任务的开
始时间点,被唤醒并执行该任务。之后 更新最
近一个要执行的任务,继续休眠。
的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此
所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延
迟或异常都将会影响到之后的任务。
!"
鉴于 的上述缺陷,:推出了基于线程池设计的
!"。其设计思想是,每一个被调度的任务都会由线程池中
一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需要注意
的是,只有当任务的执行时间到来时,!"才会真正启动一
个线程,其余时间 !"都是在轮询任务的状态。
清单 2. 使用 ScheduledExecutor 进行任务调度
$$%
#$$$!"%
#$$$!"%
#$$$;%
!"<&
#'())%
!"*#'+&
*+%
$#'(#'%
,
-.
*+&
$$*)")/#'+%
,
*01+&
!"(
!"$2=*35+%
>3(3%
3(3%
66从现在开始 3 秒钟之后,每隔 3 秒钟执行一次 #3
$?@"<*
2!"*)#3)+
>3
3;$! .'>+%
>7(3%
7(3%
66从现在开始 7 秒钟之后,每隔 7 秒钟执行一次 #7
$@">*
2!"*)#7)+
>7
7;$! .'>+%
,
,
.8
"#3
"#3
"#7
"#3
"#3
"#7
清单 7展示了 !"中两种最常用的调度方法
?@"<和
@">。?@"<每次执行时间为上一次
任务开始起向后推一个时间间隔,即每次执行时间为 8>
>/>/74A;
@">每次执行时间为上一次任务结束起向后推一个时
间间隔,即每次执行时间为:>
>/"/
>/74"/74。由此可见,
?@"<是基于固定时间间隔进行任务调度,
@">取决于每次任务执行的时间长短,是基于不固定
时间间隔进行任务调度。
用 !"和 实现复杂任务调度
和 !"都仅能提供基于开始时间与重复间隔的任务调
度,不能胜任更加复杂的调度需求。比如,设置每星期二的 3B8CD835执行任
务。该功能使用 和 !"都不能直接实现,但我们可
以借助 间接实现该功能。
清单 3. 使用 ScheduledExcetuor 和 Calendar 进行任务调度
$$%
#$$ %
#$$>%
#$$%
#$$$!"%
#$$$!"%
#$$$;%
!"7"&
#'())%
!"7*#'+&
*+%
$#'(#'%
,
-.
*+&
$$*)>()/2>*+/)"
)/#'+%
,
644
4计算从当前时间 > 开始,满足条件 .E
.E>
4.EF.E 的最近时间
4-
46
!>* >
.E
.E>.EF
.E+&
66计算当前时间的 !!GH.@HI!?<>?IH.@H!!G
F.;<H.@H>?I';!! .'> 等各个字段值
.EI(
>$* $!!GH.@HI!?<+%
>.E(
>$* $>?IH.@H!!G+%
F(
>$* $F.;<H.@H>?I+%
(
剩余27页未读,继续阅读
lovedahai123
- 粉丝: 8
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AIS2024 valid
- 最入门的爬虫代码 python.docx
- 爬虫零基础入门-爬取天气预报.pdf
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1