1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package
com.weiyuanit.test1;
import
java.util.Date;
import
java.util.TimerTask;
/***********************
* @author:han
* @version:1.0
* @created:2013-11-20
***********************
*/
public
class
MyTask
extends
TimerTask {
@Override
public
void
run() {
//此处添加具体任务代码
try
{
System.out.println(
" =============== call at :"
+ (
new
Date()));
}
catch
(Exception e) {
System.out.println(
"-------------解析信息发生异常--------------"
);
e.printStackTrace();
}
}
}
|
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
package
com.weiyuanit.test1;
import
java.util.Calendar;
import
java.util.Date;
import
java.util.Timer;
import
javax.servlet.ServletContextEvent;
import
javax.servlet.ServletContextListener;
/***********************
* 定时任务测试
* @author:han
* @version:1.0
* @created:2013-11-20
***********************
*/
public
class
MyListener
implements
ServletContextListener{
private
Timer timer =
null
;
//时间间隔
private
static
final
long
PERSIOD_DAY =
24
*
60
*
60
*
1000
;
public
void
contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
timer.cancel();
}
public
void
contextInitialized(ServletContextEvent sce) {
timer =
new
Timer(
true
);
//设置任务计划,启动和间隔时间
//timer.schedule(new MyTask(),0, 86400000);
MyTask myTask =
new
MyTask();
//1.立刻开始执行myTask的任务,只执行一次
// timer.schedule(myTask, new Date());
//2.立刻开始执行myTask的任务,执行完本次任务,隔3秒再执行一次
// timer.schedule(myTask, new Date(),3000);
//3.5秒钟后开始执行myTask的任务,只执行一次
// timer.schedule(myTask, 5000);
//4.5秒钟后开始执行myTask的任务,执行完本次任务后,隔3秒再执行一次
// timer.schedule(myTask, 5000,3000);
//5.立刻开始执行myTask任务,每隔3秒再执行一次
// timer.scheduleAtFixedRate(myTask, new Date(), 3000);
//6.秒钟后开始执行myTask任务,每隔3秒执行一次
// timer.schedule(myTask, 5000,3000);
/**
* 需要注意的是scheduleAtFixedRate和schedule在参数完全相同的情况下,执行效果是不同的。
* 上面例子中任务只是打印一个字符串,比较简单。
* 但如果任务比较复杂,或者由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,
* 则scheduleAtFixedRate方法将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”;
* 而schedule方法的后续执行也将被延迟。
* 所以,在长期运行中,scheduleAtFixedRate执行的频率将正好是指定周期的倒数,schedule 执行的频率一般要稍慢于指定周期的倒数。
另外,TimerTask的构造函数是protected,所以无法再类中直接new一个TimerTask,而只能写一个类继承TimerTask。
*/
/* try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" 1 ");
//timer.cancel();//结束任务执行,程序并不终止
System.out.println(" 2 ");*/
//7.定制每日夜里2:00执行方法
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 14);
calendar.set(Calendar.MINUTE, 24);
calendar.set(Calendar.SECOND, 0);
//第一次执行定时任务的时间
Date date = calendar.getTime();
/**
* 如果第一次执行定时任务的时间 小于 当前的时间,
* 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。
* 如果不加一天,任务会立即执行
*/
if (date.before(new Date())) {
date = this.addDate(date, 1);
}
//timer.schedule(myTask, date,PERSIOD_DAY);
timer.schedule(myTask, date,5000);
/**
* 注意事项:
* 一定要注意时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后发布程序
* 或是重启过服务。那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点再执行。
* 为了避免这种情况发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,
* 就在此基础上加一天。
*/
}
/**
* 增加或减少天数
* *******************
* @author: han
* 2013-11-21
* *******************
* @param date
* @param num
* @return
*/
public
Date addDate(Date date,
int
num) {
Calendar startDate = Calendar.getInstance();
startDate.setTime(date);
startDate.add(Calendar.DAY_OF_MONTH, num);
return
startDate.getTime();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<web-app version=
"2.5"
xmlns=
"http://java.sun.com/xml/ns/javaee"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http:
//java.sun.com/xml/ns/javaee
http:
//java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- test1包 -->
<listener>
<listener-
class
>com.weiyuanit.test1.MyListener</listener-
class
>
</listener>
</web-app>
|
可以去下载:java定时任务小例子
本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1329591,如需转载请自行联系原作者