java 如何关闭timer
关闭 Timer 的方法
在 Java 中,Timer 类用于调度任务执行。关闭 Timer 需要调用其 cancel() 方法,该方法会终止计时器并丢弃所有已安排的任务。以下是具体操作方式:
调用 cancel() 方法

Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Task executed");
}
}, 1000);
// 取消 Timer
timer.cancel();
注意事项
cancel()方法会终止计时器线程,但不会中断正在执行的任务。如果任务正在运行,它将完成执行。- 一旦调用
cancel(),计时器无法再调度新任务,任何后续调用schedule()将抛出IllegalStateException。 - 如果希望确保任务完全停止,可以在任务代码中检查中断标志或使用共享标志变量。
示例:使用标志变量控制任务停止

volatile boolean isRunning = true;
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (!isRunning) {
this.cancel();
return;
}
System.out.println("Task executed");
}
}, 0, 1000);
// 停止任务和 Timer
isRunning = false;
timer.cancel();
替代方案:使用 ScheduledExecutorService
现代 Java 更推荐使用 ScheduledExecutorService,它提供更灵活的任务管理,包括更好的取消机制:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
ScheduledFuture<?> future = executor.scheduleAtFixedRate(
() -> System.out.println("Task executed"),
0, 1, TimeUnit.SECONDS
);
// 取消任务并关闭 Executor
future.cancel(true);
executor.shutdown();
ScheduledExecutorService 的优势包括:
- 支持通过
Future.cancel()中断正在运行的任务。 - 提供
shutdown()和shutdownNow()方法更灵活地关闭线程池。






