日期:2014-05-19 浏览次数:20859 次
public static void main(String[] args) { //当天晚上23点开始执行任务,每隔1小时重复执行一次 Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, 23); Date d = c.getTime(); Timer t = new Timer(); t.schedule(new TimerTask(){ @Override public void run() { // TODO 任务内容 } }, d, 3600 * 1000); }
------解决方案--------------------
java Timer足够你用了
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import org.apache.log4j.Logger;
public class TaskTimerManager {
private Timer timer;
public void timerStart() {
timer = new Timer();
//TimerSend2OutBound 是具体的业务实现类
TimerSend2OutBound toOutBoundTask = new TimerSend2OutBound();
// 第一次运行时间08:00:00,关于执行时间,还可有很大配置,可放在配置文件中,在网上查查
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '16:00:00'");
// 首次运行时间
Date firstTime;
try {
firstTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));
timer.schedule(toOutBoundTask, firstTime, 60*60*1000);
} catch (ParseException e) {
e.printStackTrace();
}
}
public void cancel() {
if (timer != null) {
timer.cancel();
}
}
}
------解决方案--------------------
timer.schedule(task, firstTime, period);
task参数是,TimerTask 类,在包:import java.util.TimerTask .使用者要继承该类,并实现 public void run() 方法,因为 TimerTask 类 实现了 Runnable 接口。
firstTime参数是,用户调用 schedule() 方法后,要等待这么长的时间才可以第一次执行 run() 方法。
period参数是,第一次调用之后,从第二次开始每隔多长的时间调用一次 run() 方法。
import java.util.Timer;
import java.util.TimerTask;
public class TestTimer {
static Timer timer = null;
public static void main(String[] args) {
timer = new Timer();
System.out.println("-----------定时间器已经启动。。。。。。");
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("运行我了哦!!!");
}
}, 0, 5*1000);
}
}
------解决方案--------------------
@Schedule(second = "0", minute = "0", hour = "23", dayOfWeek = "Mon-Sat", dayOfMonth = "*", month = "*", year = "*", persistent = false, info = PBISYNCHRONOUS_SCHEDULER_INFO)
private void scheduledTimeout(final Timer timer){
}
最简单,这个每天23执行,second = "0", minute = "0", hour = "23" ,在三个值,指定什么就是什么,
比如second = "23", minute = "12", hour = "12" 12点12分23秒,要每10分钟一次 就 second = "23", minute = "*/10", hour = "12" ,这是12点时。每10分钟一次,改hour = "*",每10分一次,
------解决方案--------------------
timer.schedule第二个参数修改一下:
不是直接用getTime就完事了,要取当前的系统时间,然后取准备运行的系统时间,计算时间差。
例如:
long nowTime = (Calendar.getInstance()).getTimeInMillis();
Calendar runTime = ...
runTime.set(Calendar.HOUR_OF_DAY,23);
runTime.set(....,0);时分都设置为0分0秒
runt = runTime.getTimeInMillis();
中间