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

Java schedule()在执行后留下一个打开的线程,java,multithreading,timer,timertask,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(

我正在尝试使用
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;
  }
}

保留对
计时器的引用
并调用
Timer.cancel()

阅读javadocs,都有文档记录

保留对
计时器的引用
并调用
Timer.cancel()

阅读javadocs,都有文档记录

我确实读过文件。。。“计时器的任务执行线程正常终止(并被垃圾回收)。但是,这可能需要任意长的时间。”我希望任意长的时间以毫秒为顺序,而不是秒。。。不过这解决了我的问题,谢谢:DI确实阅读了文档。。。“计时器的任务执行线程正常终止(并被垃圾回收)。但是,这可能需要任意长的时间。”我希望任意长的时间以毫秒为顺序,而不是秒。。。这解决了我的问题,谢谢