可重置Java定时器

我想有一个java.utils.Timer与一个可重置时间在java.I需要设置一次off事件发生在X秒。如果在创建定时器的时间和X秒之间没有发生任何事情,则事件会正常发生。

然而,如果在X秒之前,我决定该事件应该发生在Y秒后,然后我想要能够告诉定时器重置其时间,以便事件发生在Y秒。
 例如。定时器应该能够做以下事情:

Timer timer = new Timer();  
timer.schedule(timerTask, 5000); //Timer starts in 5000 ms (X)

//At some point between 0 and 5000 ms...  
setNewTime(timer, 8000);  //timerTask will fire in 8000ms from NOW (Y).

我没有看到一个办法这样做使用utils计时器,如果你调用cancel(),你不能再次调度它。

我接近复制这种行为的唯一方法是使用javax.swing.Timer,并涉及停止原创定时器,并创建一个新的。例如:

timer.stop();
timer = new Timer(8000, ActionListener);
timer.start();

有更容易的方法吗?

根据Timer文档,在Java 1.5以后,你应该更喜欢ScheduledThreadPoolExecutor。 (你可能喜欢使用Executors.newSingleThreadScheduledExecutor()来创建这个执行器,以方便使用;它创建的东西就像一个计时器。)

很酷的是,当您计划任务(通过调用schedule())时,它返回一个ScheduledFuture对象。您可以使用此操作取消计划任务。然后,您可以提交具有不同触发时间的新任务。

ETA:Timer文档链接不说任何关于ScheduledThreadPoolExecutor,但是OpenJDK版本有这样说:

Java 5.0 introduced the java.util.concurrent package and
one of the concurrency utilities therein is the
ScheduledThreadPoolExecutor which is a thread pool for repeatedly
executing tasks at a given rate or delay. It is effectively a more
versatile replacement for the Timer/TimerTask
combination, as it allows multiple service threads, accepts various
time units, and doesn’t require subclassing TimerTask (just
implement Runnable). Configuring
ScheduledThreadPoolExecutor with one thread makes it equivalent to
Timer.

http://stackoverflow.com/questions/32001/resettable-java-timer

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:可重置Java定时器