簡體   English   中英

Java util.timer固定延遲不起作用?

[英]Java util.timer fixed delay not working?

我試着看看計時器的固定延遲方法(計划)是如何工作的,但看起來我失敗了。

這是我的代碼:

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)結束,計時器2不應該從4109(而不是3000)開始嗎? 我嘗試使用'scheduleAtFixedRate',它給了我完全相同的結果。 我做錯什么了嗎? 或者是否有一些我無法理解的概念?

不,這就是它的工作方式。 期間是開始時間之間的時間段,而不是結束時間和下一個開始時間之間的時間段。

基本上你用簡單的英語告訴它“從1秒開始並在那之后每兩秒執行一次”所以1,3,5,7等是合乎邏輯的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM