タイマーの固定遅延メソッド (スケジュール) がどのように機能するかを確認しようとしましたが、失敗したようです。
これは私のコードです:
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));
}
}
これは私が得るものです:
1000.0 で開始する 1 つのタイマー
1000.0 で開始する 1 つのプロセス
2109.0 で 1 つのプロセスが終了
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) で終了したため、タイマー 2 は (3000 ではなく) 4109 で開始するべきではありませんか? 「scheduleAtFixedRate」を使用してみましたが、まったく同じ結果が得られました。私は何か間違ったことをしましたか?それとも、私が理解できない概念がありますか?