我试着看看计时器的固定延迟方法(计划)是如何工作的,但看起来我失败了。
这是我的代码:
public class Timer_Test {
static Timer _a_timer;
static int num_o_proc = 0;
static int timer_call = 0;
static double prog_begin_time;
public static void main(String[] args) {
prog_begin_time = System.currentTimeMillis();
_a_timer = new Timer();
_a_timer.schedule(new TimerTask() {
@Override
public void run() {
timer_call++;
System.out.println(timer_call + " timer start at " + (System.currentTimeMillis() - prog_begin_time));
process();
System.out.println(timer_call + " timer end at " + (System.currentTimeMillis() - prog_begin_time));
if (timer_call >= 5) {
System.exit(0);
}
}
}, 1000, 2000);
}
public static void process() {
num_o_proc++;
int local_num_o_proc = num_o_proc;
System.out.println(local_num_o_proc + " process start at " + (System.currentTimeMillis() - prog_begin_time));
double _a_ = 0;
for(int x=0; x<Integer.MAX_VALUE/2; x++) {
_a_++;
}
System.out.println(local_num_o_proc + " process end at " + (System.currentTimeMillis() - prog_begin_time));
}
}
这就是我得到的:
1个计时器从1000.0开始
1个流程从1000.0开始
1个过程结束于2109.0
1个计时器结束于2109.0
2计时器从3000.0开始
2流程从3000.0开始
2过程结束于4109.0
2计时器结束于4109.0
3计时器从5000.0开始
3流程从5000.0开始
3流程结束于6109.0 .....
由于第一个计时器任务在2109(2109 + 2000)结束,不应该在4109(而不是3000)开始计时器2? 我尝试使用'scheduleAtFixedRate',它给了我完全相同的结果。 我做错什么了吗?或者是否有一些我无法理解的概念?
答案 0 :(得分:3)
不,这就是它的工作方式。期间是开始时间之间的时间段,而不是结束时间和下一个开始时间之间的时间段。
基本上你用简单的英语告诉它“从1秒开始,然后每两秒执行一次”,所以1,3,5,7等是合乎逻辑的解释。