boolean timing = true; /* this is a global attribute and its only here for context */
Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
Platform.runLater(() -> {
new Thread(() -> {
if (!timing) {
try {
tt.cancel(); /* I want to cancel this if timming is false*/
} catch (Exception e) {
e.printStackTrace();
}
} else {
update();
}
}).run();
});
}
}, 10, 10);我想知道是否可以取消这个特定的TimerTask本身,请注意,"tt“只是一个例子,我不知道还能叫它什么。谢谢。
发布于 2015-01-04 03:45:14
Timer有自己的后台线程。除非您的任务需要很长时间才能运行,否则不需要在任务的#run()方法中创建一个新线程(也不应该)。
可以通过使实例final取消对计时器的后续执行。
final Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
// Do work.
if (!timing) {
t.cancel();
}
}
});(为简洁起见省略了异常处理。)
如果您只想取消任务本身(允许计时器调度的其他任务继续运行),则对任务实例的#取消()方法的调用很简单:
if (!timing) {
this.cancel();
}还应该确保timing变量被声明为volatile。如果不这样做,则可以在每个线程中缓存该值,并且您将无法观察更改。
发布于 2015-01-04 03:47:37
不如创建一个新的方法来取消Timer
private void cancelTimer(Timer t)
{
t.cancel();
}您还需要使Timer成为最终结果。
https://stackoverflow.com/questions/27761848
复制相似问题