当前位置: 代码迷 >> J2EE >> 关于做过java定时器的入
  详细解决方案

关于做过java定时器的入

热度:45   发布时间:2016-04-22 00:24:54.0
关于做过java定时器的进
定时器,可以根据自己定的时间执行一些方法。
有用过的人给一些参考,谢谢。急求,在线等。

------解决方案--------------------
Java code
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();

中间的那个参数就是: runt - nowTime。
  相关解决方案