定时任务调度框架实现总结
转自:http://www.blogchong.com/post/96.html
在应用里经常都有用到在后台跑定时任务的需求。
举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等;又比如博客资讯网站需要定时更新最新最热资讯列表等;又比如后台需要定时获取数据等。
其实,不止这些场景,定时任务始终会在业务处理中占据很重要的位置,因此,熟悉定时任务框架的使用非常有必要。
通常有四种实现定时任务的方式:
(1)直接使用线程Thread来达到定时的目的
我们创建一个thread,然后让他一直while循环,并且使用sleep的方式达到定时的目的。
这种方法简单,但是略显粗暴,并且功能上也有所欠缺,难以控制定时任务启停。
简单例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package com.blogchong.util;
/**
* @author:blogchong
* @E-mail: blogchong@163.com
* @Version:1.0
* @Blog: www.blogchong.com
* @CreateTime:2015年4月1日 上午11:09:29
* @Description: Thread实现定时任务
*/
public class Timing {
public static void main(String[] args) {
//设置时间间隔
final long timeInterval = 1000 ;
Runnable runnable = new Runnable() {
public void run() {
while ( true ) {
//执行定时
System.out.println( "Hello,blogchong~!欢迎继续关注博客虫!" );
try {
//进入定时
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
|
(2)使用Timer和TimerTask
使用Timer类,可以调度任务,并且可以控制取消任务,第一次执行时,可以设置延迟执行时间,并且Timer类是线程安全的。
使用实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.blogchong.util;
/**
* @author:blogchong
* @E-mail: blogchong@163.com
* @Version:1.0
* @Blog: www.blogchong.com
* @CreateTime:2015年4月1日 上午11:09:29
* @Description: Thread实现定时任务
*/
import java.util.Timer;
import java.util.TimerTask;
public class Timing {
public static void main(String[] args) {
TimerTask task = new TimerTask() {
public void run() {
System.out.println( "欢迎关注博客虫公众微信号blogchong!" );
}
};
Timer timer = new Timer();
long delay = 0 ;
long intevalPeriod = 1 * 1000 ;
timer.scheduleAtFixedRate(task, delay, intevalPeriod);
}
}
|
(3)使用ScheduledExecutorService
在Timer的基础上,ScheduledExecutorService是通过线程池来执行的,同样支持延迟执行,提供良好的入口设置时间间隔。
代码实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package com.blogchong.util;
/**
* @author:blogchong
* @E-mail: blogchong@163.com
* @Version:1.0
* @Blog: www.blogchong.com
* @CreateTime:2015年4月1日 上午11:09:29
* @Description: Thread实现定时任务
*/
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Timing {
public static void main(String[] args) {
Runnable runnable = new Runnable() {
//run里头的是执行主体
public void run() {
System.out.println( "博客虫讲解的storm视频,马上会在极客学院上线,欢迎关注!" );
}
};
ScheduledExecutorService service = Executors
.newSingleThreadScheduledExecutor();
// 设置时间间隔,如示例,0为延迟时间,1为间隔,最后一个为时间单位
service.scheduleAtFixedRate(runnable, 0 , 1 , TimeUnit.SECONDS);
}
}
|
(4)使用quartz框架
quartz是一个定时任务调度框架,或者说是作业调度框架。想比与之前三种定时任务的实现,更为复杂。他不止能支持成千上百个作业任务的调度,同时它还能对所有的定时任务进行操作,比如启动,停止,暂停,查看等。
此外,quartz还支持集群的部署方式,支持多节点,通过mysql进行中间状态的保存,支持在单节点故障的情况下依然能够保证任务的正常调度。
转载于:https://www.cnblogs.com/sharpest/p/8571887.html
定时任务调度框架实现总结相关推荐
- Quartz定时任务调度框架
一.引言 1.1 简介 Quartz :Quartz Enterprise Job Scheduler 是一个定时任务调度框架.比如你遇到这样的问题: 想在30分钟后,查看订单是否支付,未支付则取消订 ...
- Spring整合定时任务调度框架Quartz实
Spring整合定时任务调度框架Quartz实战 定时的任务处理在程序开发中应用的相当普遍,之前一直使用JDK的Timer类库来做任务调度功能不是很方便,因为它不能像cron服务那样可以指定具体年.月 ...
- TBSchedule淘宝开源定时任务调度框架(附客户端源码demo)
淘宝开源定时任务调度框架 下载TBSchedule源码svn地址:code.taobao.org/p/tbschedule/src/trunk/ 内容包括两部分:TBSchedule源码及开发依赖包t ...
- 任务调度框架Quartz(一) Quartz——一个强大的定时任务调度框架
Quartz,水晶.石英,一个简单朴素有美丽的名字,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框架. 何为定时任务调 ...
- ElasticJob分布式定时任务调度框架以及生产遇到的问题
ElasticJob分布式定时任务调度框架 1:maven配置 2:客户端xml配置 3:测试类 4:重点: 5:总结 1:maven配置 <!--elastic-job--><de ...
- 分布式定时任务调度框架Quartz
文章目录 一.Quartz引言 二.Quartz使用 2.1 导入依赖 2.2 定义Job 2.3 API测试 2.3.1 细节 2.4 配置 2.5 核心类说明 三.Trigger触发器 3.1 S ...
- 一文揭秘定时任务调度框架quartz
之前写过quartz或者引用过quartz的一些文章,有很多人给我发消息问quartz的相关问题, quartz 报错:java.lang.classNotFoundException quartz源 ...
- quartz框架_定时任务调度框架Quartz
最近需要写一个每天定点自动执行的定时任务,对于以前自己写小项目,可能会选择java自带的Timer类,但是对于公司中的项目,Timer类实现定时任务只能有一个后台线程执行任务,并且只能让程序按照某个频 ...
- 分布式定时任务调度框架实践
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的 ...
最新文章
- RandomForest随机森林总结
- 学了网络安全以后能做哪些岗位呢?来来来,带你们了解
- C语言指针和数组的天生姻缘
- 网博士自助建站系统_自助建站:自助建站到底好还是不好?
- Python any 函数 - Python零基础入门教程
- mysql 指定数字排序_Mysql数据排序
- pycharm无法导入Pillow
- HTML5 Canvas 绘图
- vue2.0-脚手架-todolist案例
- angular_directive动感超人
- Git:本地Git仓库连接码云并新建分支提交
- 使用JavaScript获取设备屏幕的宽度
- 第18集丨不立志,天下无可成之事
- SSR服务端渲染(nuxt重构项目)
- excel删除无尽空白行_会计常用的Excel技巧,建议收藏~
- 人脸识别广告显示屏通过人像识别、面部识别应用
- 【LeetCode343】剪绳子(动态规划)
- HDU - 1078 FatMouse and Cheese
- 出来混迟早是要还的:算法技术债
- <LearnOpenCV(1) C++>图片读写