我尝试了一切。这也是How to stop the task scheduled in Java.util.Timer class
我有一个实现java.util.TimerTask
的任务我用两种方式称呼该任务:
我安排这样的计时器:
timer.schedule(timerTask,60 * 1000);
有时我需要立即开始工作,如果有任何工作,则必须取消timerTask
cancelCurrentWork(); timer.schedule(timerTask,0);
此实现不会停止当前的工作: (文档说:如果在发生此调用时任务正在运行,任务将运行完成,但永远不会再运行)
但我需要它停止。
public static void cancelCurrentwork() {
if (timerTask!= null) {
timerTask.cancel();
}
}
此实现只是取消了计时器,但目前正在完成任务。
public static void cancelCurrentwork() {
if (timer!= null) {
timer.cancel();
}
}
在计时器中有一种方法可以停止当前正在执行的操作,比如Thread.kill()之类的东西吗?当我需要停止任务时,我希望它丢失所有数据。
答案 0 :(得分:6)
计时器无法将任务停在其轨道上。
您需要在运行任务本身中有一个单独的机制,检查它是否应该继续运行。例如,您可以使用AtomicBoolean keepRunning
变量,当您希望任务终止时,您将其设置为false。
答案 1 :(得分:0)
如果您的计时器正在使用某种文件/套接字等,您可以从计时器外部关闭该对象,并且计时器任务将抛出异常,您可以使用它来停止计时器。
但一般来说,你需要某种毒丸才能成功停止一个单独的线程/计时器。