写了一个SERVERLET方法,必须在每个月的5号晚上8点执行这个方法,有没有方法做这个事情,谢谢高手解答。。很急,谢谢,解决问题马上结贴。。。 写了一个SERVERLET方法,必须在每个月的5号晚上8点执行这个方法,有没有方法做这个事情,谢谢高手解答。。很急,谢谢,解决问题马上结贴 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JAVA中的Timer和TimerTaskclass Worker extends TimerTask { public void run() { System.out.println("我在工作啦!"); }}Date dateToExcute = ...java.util.Timer timer = new java.util.Timer(true);timer.schedule(new Worker, dateToExcute) ; import java.util.TimerTask;public class Test { public static void main(String[] args) throws Exception { java.util.Timer timer = new java.util.Timer(true); timer.schedule(new Worker(), 1000,2000) ; //1秒后, 每隔2秒执行一次 while(true){ Thread.sleep(1000); } }}class Worker extends TimerTask { public void run() { System.out.println("我在工作啦!"); // 这里面可以判断明确的日期,并设字新的schedule 日期 }} 一个完成的代码。import java.util.Calendar;import java.util.Date;import java.util.TimerTask;public class Test { public static void main(String[] args) throws Exception { java.util.Timer timer = new java.util.Timer(true); while (true) { // 用于下一个循环 finished = false; timer.schedule(new Worker(), getNextDate()); // 设置下一个执行日期 while (!finished) { // 不能让应用停止啊! Thread.sleep(10000); } } } static boolean finished = false; private static Date getNextDate() { Calendar cal = Calendar.getInstance(); if (cal.get(Calendar.DAY_OF_MONTH) > 5) { // 是否已经超过5号了 cal.add(Calendar.MONTH, 1); // 只能下月了 } else if (cal.get(Calendar.DAY_OF_MONTH) == 5) {// 正好5号 if (cal.get(Calendar.HOUR_OF_DAY) > 20) { // 是否超过20点 cal.add(Calendar.MONTH, 1); // 只能下月了 } } else { cal.set(Calendar.DAY_OF_MONTH, 5);// 设置5号执行 } cal.set(Calendar.HOUR_OF_DAY, 20); // 设置20:00 return cal.getTime(); }}class Worker extends TimerTask { public void run() { System.out.println("我在工作啦!"); Test.finished = true; }} http://tech.techweb.com.cn/redirect.php?tid=198593&goto=lastpost里面的quartz 好像不错,我没用过。有时间研究一下! 用quartz,可以完成你的要求。 我上学时,老师说JAVA是不能做即时性的软件的因为线程是被虚拟机调度的,什么时候调度谁也不知道. 用Quartz这个任务调度,就可以了 像这种指定时间的任务调度,采用Quartz的Cron表达式是最合适不过了。Quartz的使用也很简单只要实现一个Job接口中的一个方法,把需要执行的代码写到里面去,再把这个Job加到Scheduler中,在Trigger中用Cron指定一下,就可以运行了。具体的可以参考Quartz的官方教程:http://www.opensymphony.com/quartz/wikidocs/Tutorial.html quartz的cron表达式: 0 0 20 5 * ?http://biaoming.javaeye.com/blog/395320 0 10,14,16 * * ? 每天上午10点,下午2点,4点0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时0 0 12 ? * WED 表示每个星期三中午12点 "0 0 12 * * ?" 每天中午12点触发 "0 15 10 ? * *" 每天上午10:15触发 "0 15 10 * * ?" 每天上午10:15触发 "0 15 10 * * ? *" 每天上午10:15触发 "0 15 10 * * ? 2005" 2005年的每天上午10:15触发 "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 "0 15 10 15 * ?" 每月15日上午10:15触发 "0 15 10 L * ?" 每月最后一日的上午10:15触发 "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 把方法写成一个单独的类,然后用操作系统的定制任务就可以了。在windows下可以在系统里定制一个任务如果是在AIX或linux下,直接用contrab 重写ClassLoader,动态加载Class文件问题 关于方法重载的问题! 编译错误:找不到符号 java 如何可畫統計圖? MD5加密中文字符? 土题,请经典的回答。 日期存在整型字段中,怎样提取当天记录. [求教]一个关于类型转换的问题 java中窗口间怎样相互传递信息?★★★★★★★★★★★ 关于JDBC的很菜的问题,送分了 在同一个文件中定义多个类有什么限制? 内部类访问外部类中的局部变量final问题...
public void run() {
System.out.println("我在工作啦!");
}
}
Date dateToExcute = ...
java.util.Timer timer = new java.util.Timer(true);
timer.schedule(new Worker, dateToExcute) ;
import java.util.TimerTask;public class Test { public static void main(String[] args) throws Exception {
java.util.Timer timer = new java.util.Timer(true);
timer.schedule(new Worker(), 1000,2000) ; //1秒后, 每隔2秒执行一次
while(true){
Thread.sleep(1000);
}
}
}class Worker extends TimerTask {
public void run() {
System.out.println("我在工作啦!");
// 这里面可以判断明确的日期,并设字新的schedule 日期
}
}
import java.util.Calendar;
import java.util.Date;
import java.util.TimerTask;public class Test { public static void main(String[] args) throws Exception {
java.util.Timer timer = new java.util.Timer(true); while (true) { // 用于下一个循环
finished = false;
timer.schedule(new Worker(), getNextDate()); // 设置下一个执行日期
while (!finished) { // 不能让应用停止啊!
Thread.sleep(10000);
}
}
} static boolean finished = false; private static Date getNextDate() {
Calendar cal = Calendar.getInstance();
if (cal.get(Calendar.DAY_OF_MONTH) > 5) { // 是否已经超过5号了
cal.add(Calendar.MONTH, 1); // 只能下月了
} else if (cal.get(Calendar.DAY_OF_MONTH) == 5) {// 正好5号
if (cal.get(Calendar.HOUR_OF_DAY) > 20) { // 是否超过20点
cal.add(Calendar.MONTH, 1); // 只能下月了
}
} else {
cal.set(Calendar.DAY_OF_MONTH, 5);// 设置5号执行
}
cal.set(Calendar.HOUR_OF_DAY, 20); // 设置20:00
return cal.getTime();
}
}class Worker extends TimerTask {
public void run() {
System.out.println("我在工作啦!");
Test.finished = true;
}
}
里面的quartz 好像不错,我没用过。
有时间研究一下!
Quartz的使用也很简单只要实现一个Job接口中的一个方法,把需要执行
的代码写到里面去,再把这个Job加到Scheduler中,在Trigger中用Cron
指定一下,就可以运行了。具体的可以参考Quartz的官方教程:
http://www.opensymphony.com/quartz/wikidocs/Tutorial.html
http://biaoming.javaeye.com/blog/395320 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
在windows下可以在系统里定制一个任务
如果是在AIX或linux下,直接用contrab