java如何timer
Java 中使用 Timer
在 Java 中,java.util.Timer 和 java.util.TimerTask 类可以用于定时任务的调度。以下是具体的使用方法:
创建 TimerTask
TimerTask 是一个抽象类,需要实现其 run() 方法来定义定时任务的具体逻辑。

import java.util.TimerTask;
public class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("Task executed at: " + System.currentTimeMillis());
}
}
创建 Timer 并调度任务
Timer 用于调度 TimerTask 的执行。可以指定延迟时间或固定时间间隔。
import java.util.Timer;
public class TimerExample {
public static void main(String[] args) {
Timer timer = new Timer();
MyTask task = new MyTask();
// 延迟 1 秒后执行任务
timer.schedule(task, 1000);
// 延迟 1 秒后执行,之后每隔 2 秒重复执行
timer.schedule(task, 1000, 2000);
}
}
取消 Timer
可以通过调用 Timer.cancel() 方法取消所有已调度的任务。

timer.cancel();
使用 ScheduledExecutorService
Timer 在某些场景下可能不够灵活,推荐使用 ScheduledExecutorService(Java 5 引入),功能更强大且线程安全。
创建 ScheduledExecutorService
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorExample {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
System.out.println("Task executed at: " + System.currentTimeMillis());
};
// 延迟 1 秒后执行任务
executor.schedule(task, 1, TimeUnit.SECONDS);
// 延迟 1 秒后执行,之后每隔 2 秒重复执行
executor.scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS);
}
}
关闭 ScheduledExecutorService
使用完毕后需要显式关闭线程池。
executor.shutdown();
注意事项
Timer是单线程的,如果一个任务执行时间过长,可能会影响其他任务的调度。ScheduledExecutorService支持多线程,适合更复杂的定时任务场景。- 定时任务中应处理异常,避免任务中断。






