Timer.schedule()在执行后留下一个打开的线程

时间:2017-04-07 07:49:06

标签: java multithreading timer timertask

我正在尝试使用Timer.schedule()安排一个操作发生在1s之后。我遇到的问题是,在执行操作后,有一个打开的线程悬挂,我被迫按Ctrl + C关闭它。

我做错了吗?如何阻止计时器离开开放的线程?

public class MyClass {

  public static int WAITING_WINDOW = 1000;

  private boolean waiting = true;

  public MyClass() {}

  public void myMethod() {

    new Timer().schedule(
      new TimerTask() {
        @Override
        public void run() {
          setWaiting(false);
        }
      }, WAITING_WINDOW
    );
  }

  public void setWaiting(boolean waiting) {
    this.waiting = waiting;
  }
}

1 个答案:

答案 0 :(得分:3)

保留对Timer的引用并致电Timer.cancel()。 并阅读javadocs,它们都记录在那里!