java中的计时器任务?

java中的计时器任务?,java,timer,timertask,Java,Timer,Timertask,我必须用java做timertask。这个场景是:我必须为一个任务安排一些初始延迟。如果我点击了一个按钮,它将取消当前计时器,然后它将重新安排它。如何在java中实现它 使用cancel()后,我无法再次访问计时器。也就是说,我不能重用那个对象。我已将计时器和计时器任务声明为静态 提前感谢。我能想到的最简单的实现方法是使用 假设您希望将任务安排在30秒内运行: ScheduledExecutorService scheduler = Executors.newScheduledThreadPoo

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

使用
cancel()
后,我无法再次访问计时器。也就是说,我不能重用那个对象。我已将
计时器
计时器任务
声明为静态


提前感谢。

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

假设您希望将任务安排在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(); 

为此目的,也有一种方法。它将为集群环境提供更大的灵活性。

只要它们没有声明为
最终版
,只需创建新实例。

我没有声明为最终版。仅声明为静态。如果我计划一个新任务,则前一个计划程序将停止/终止其进程??这取决于您如何使用它。如何执行?当我关闭计划程序对象时。我不能为同一个对象安排另一个任务?
scheduler.schedule()
返回一个
Future
对象,您所要做的就是记住
Future
并使用它的
cancel()
方法从
执行器中删除单个任务,然后您可以安排一个新任务。您不必每次都创建一个新的执行器。单击按钮时,只需取消旧任务并计划新任务。