在计时器运行时更​​改计时器间隔

时间:2015-03-30 13:36:45

标签: java multithreading timer

当计时器当前正在运行时,如何更改Timer间隔?

我到目前为止尝试的方法是:

for (Thread thread : Thread.getAllStackTraces().keySet()) {
        if (thread.getName().length() > 10) {
            if (thread.getName().substring(0, 11).equals("TimerActive")) {
                thread.interrupt();
                if (thread.isInterrupted())
                    Log.d("Timer interrupted");
                else
                    Log.d("Timer not interrupted");
            }
        }
}

我尝试找到当前活动的线程并停止那些作为计时器的线程,然后使用新的间隔创建另一个计时器。但由于某种原因,interrupt()方法不起作用,因为我得到“Timer not interrupted”日志。在这种情况下,我将有两个不同时间间隔的运行计时器。

我尝试的第二种方法是将计时器存储在ArrayList中,并在我想要更改间隔时取消并重新创建它们,但是在这种情况下我收到一条错误,表示我无法访问计时器被取消了

1 个答案:

答案 0 :(得分:0)

每秒打印“滴答”,但每两秒更改一次。

public class Y {
  public static void main(String[] args)throws Exception {
    Timer timer = new Timer();
    Action task = new Action();
    timer.schedule( task, 2000, 1000 );
    Thread.sleep( 4000 );
    // this is where the user request a new interval, 2 sec.
    task.cancel();
    timer.schedule( new Action(), new Date(task.last + 2000), 2000 );
    Thread.sleep( 8000 );
    task.cancel();
  }
}

class Action extends TimerTask {
  private long last;
  public void run(){
    last = scheduledExecutionTime();
    System.out.println( "tick" );
  }
  public long getLast(){
    return last;
  } 
}

可能会有一些漂移。