4

我必须在java中做timertask。场景是:我必须首先安排一个任务延迟一些。如果我点击了一个按钮,它将取消当前的计时器,然后它会重新安排它。如何在java中实现它?

当我用过时,cancel()我无法再次访问计时器。那就是我不能重用那个对象。我已将Timerand声明Timertask为静态的。

提前致谢。

4

3 回答 3

7

我能想到的最简单的实现方法是使用Executor

假设您想安排一个任务在 30 秒内运行:

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(new Task(), 30, TimeUnit.SECONDS);

Task必须是实现Runnable接口的类:

class Task implements Runnable
{
    public void run()
    {
        // do your magic here
    }
}

如果您需要停止执行任务,可以使用shutdownNow方法:

// prevents task from executing if it hasn't executed yet
scheduler.shutdownNow(); 
于 2010-12-08T14:09:46.837 回答
2

只要它们未声明为final,只需创建新实例即可。

于 2010-12-08T14:16:36.063 回答
1

也有用于此目的的Quartz API。它将为您在集群环境中提供更大的灵活性。

于 2010-12-08T14:14:45.627 回答