12

実行時にタイマーの期間を変更するにはどうすればよいですか?

    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {

             // read new period
             period = getPeriod();

             doSomething();

        }
    }, 0, period);
4

4 に答える 4

8

これを直接行うことはできませんが、 のタスクをキャンセルTimerして、目的の期間で再スケジュールできます。

方法はありませんgetPeriod

于 2011-06-29T12:03:28.173 に答える
0
Timer timer = new Timer();  //should not create timer again 
private long periord = 1000; // periord is changed at runtime

public void runTaskPeriord() {
    
    TimerTask task = new TimerTask() {      
        @Override
        public void run() {
            log.debug("Task run" );
            if(periord <= 3000) {
                this.cancel();  // cancel this task to run new task
                periord += 1000; 
                runTaskPeriord();
            }
        }
    };
    
    timer.schedule(task, periord, periord);
    int countDeletedTasks = timer.purge(); // remove cancel task from timer

}
于 2021-08-13T03:31:36.980 に答える