取消匿名 TimerTask
Cancel anonymous TimerTask
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" 只是一个例子,我不知道还能称呼它什么。谢谢。
Timer
s 有自己的后台线程。除非你的任务需要很长时间才能 运行,否则你不需要在任务的 #run()
方法中创建一个新线程(你也不应该这样做)。
您可以通过使实例final
:
取消定时器的后续执行
final Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
// Do work.
if (!timing) {
t.cancel();
}
}
});
(为简洁起见省略了异常处理。)
如果您只想取消任务本身(允许计时器安排的其他任务继续 运行ning),只需调用任务实例的 #cancel() 方法即可:
if (!timing) {
this.cancel();
}
您还应确保已声明 timing
变量 volatile
。如果不这样做,该值可能会缓存在每个线程中,您将无法观察到变化。
你想一个新的方法来取消Timer
怎么样?
private void cancelTimer(Timer t)
{
t.cancel();
}
您还需要完成 Timer
决赛。
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" 只是一个例子,我不知道还能称呼它什么。谢谢。
Timer
s 有自己的后台线程。除非你的任务需要很长时间才能 运行,否则你不需要在任务的 #run()
方法中创建一个新线程(你也不应该这样做)。
您可以通过使实例final
:
final Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
// Do work.
if (!timing) {
t.cancel();
}
}
});
(为简洁起见省略了异常处理。)
如果您只想取消任务本身(允许计时器安排的其他任务继续 运行ning),只需调用任务实例的 #cancel() 方法即可:
if (!timing) {
this.cancel();
}
您还应确保已声明 timing
变量 volatile
。如果不这样做,该值可能会缓存在每个线程中,您将无法观察到变化。
你想一个新的方法来取消Timer
怎么样?
private void cancelTimer(Timer t)
{
t.cancel();
}
您还需要完成 Timer
决赛。