高手们能不能跟我说下java里面scheduleAtFixedRate怎么用法的呢看API里面是这样写的:
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。但还是不太懂...那位高手能详细讲下呢·最好能举个小例子呢·
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。但还是不太懂...那位高手能详细讲下呢·最好能举个小例子呢·
你是要更新DB吧,另起一个新的进程来执行他是一个办法:
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask; public class Test {
public static void main(String[] args) {
Timer timer = new Timer(false); //参数false保证,主进程结束后,timer任务不会被取消,依然可以定期循环执行。
MyTask task = new MyTask();
Calendar cal = Calendar.getInstance();
cal.set(2008, 11, 11, 0, 0, 0); // 在2008/12/11 00:00:00开始
Date firstTime = cal.getTime();
int rate = 24 * 60 * 60 * 1000; // 每24小时执行一次
timer.scheduleAtFixedRate(task, firstTime, rate);
//Scanner scan = new Scanner(System.in);
//while (scan.hasNextLine()) {
// String line = scan.nextLine();
// if ("QUIT".equalsIgnoreCase(line)) {
// timer.cancel();
// System.out.println("QUIT");
// break;
// }
//}
}
} class MyTask extends TimerTask {
@Override
public void run() {
// TODO 更新DB
}
} 办法2:
在某一个类中添加下面代码,这样在这个类第一次被加载是就开始执行了:
public class Test {
static {
Timer timer = new Timer(false);
MyTask task = new MyTask();
Calendar cal = Calendar.getInstance();
cal.set(2008, 11, 11, 0, 0, 0); // 在2008/12/11 00:00:00开始
Date firstTime = cal.getTime();
int rate = 24 * 60 * 60 * 1000; // 每24小时执行一次
timer.scheduleAtFixedRate(task, firstTime, rate);
Scanner scan = new Scanner(System.in);
while (scan.hasNextLine()) {
String line = scan.nextLine();
if ("QUIT".equalsIgnoreCase(line)) {
timer.cancel();
System.out.println("QUIT");
break;
}
}
}
...... }
兄弟,够意思了吧
第一时间帮你搞定
够意思了吧
希望对你有帮助
^_*
呵呵·就是要定时更新DB啊·太感谢2楼了···O(∩_∩)O