Java 的 Timer
是一个用于调度任务在指定时间或按固定间隔执行的工具类。它位于 java.util
包中,通常用于安排一次性或重复性的任务。
主要特点:
- 单线程执行:
Timer
使用单个后台线程来执行所有任务。因此,如果一个任务执行时间过长,可能会影响其他任务的执行。 - 任务调度:可以安排任务在指定的延迟后执行,或者以固定的时间间隔重复执行。
- 任务取消:可以通过
TimerTask.cancel()
方法取消已安排的任务。
使用示例:
import java.util.Timer;
import java.util.TimerTask;
public class TimerExample {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("Task executed at: " + new java.util.Date());
}
};
// 安排任务在延迟 1000 毫秒后执行,并且每隔 2000 毫秒重复执行
timer.schedule(task, 1000, 2000);
}
}
注意事项:
- 线程安全:
Timer
是线程安全的,但因为它使用单线程执行任务,所以不适合需要高并发的场景。 - 异常处理:如果
TimerTask
的run
方法抛出未捕获的异常,Timer
线程会终止,导致所有后续任务无法执行。
替代方案:
对于更复杂的调度需求,可以考虑使用 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 scheduler = Executors.newScheduledThreadPool(1);
Runnable task = () -> System.out.println("Task executed at: " + new java.util.Date());
// 安排任务在延迟 1000 毫秒后执行,并且每隔 2000 毫秒重复执行
scheduler.scheduleAtFixedRate(task, 1000, 2000, TimeUnit.MILLISECONDS);
}
}
通过使用 ScheduledExecutorService
,可以更好地控制线程池的大小和任务执行的行为。
THE END
暂无评论内容