1. 定时器基础与应用场景
在Java多线程编程中,定时器(Timer)是一个非常重要的工具类。它允许我们安排任务在特定时间后执行,或者以固定间隔重复执行。定时器的核心思想是将任务执行与时间管理解耦,让开发者可以专注于业务逻辑的实现。
1.1 定时器的典型应用场景
定时器在实际开发中有广泛的应用,以下是几个典型场景:
-
请求超时处理:在客户端-服务器交互中,客户端发送请求后通常不会无限期等待响应。例如,设置3秒超时,如果超过这个时间没有收到响应,就触发超时处理逻辑。
-
延迟任务执行:某些任务需要在当前时间之后的一段时间执行。比如,电商平台中的订单未支付自动取消功能,可以在创建订单30分钟后检查支付状态。
-
周期性任务:需要定期执行的任务,如每天凌晨的数据备份、每小时的状态检查等。
-
资源清理:一些临时资源需要在使用后一段时间自动清理,比如缓存过期机制。
1.2 Java标准库中的Timer类
Java在java.util包中提供了Timer类,它内部使用一个后台线程来执行所有定时任务。Timer的主要特点包括:
- 单线程执行所有任务
- 任务执行时间如果晚于预期,会影响后续任务的执行
- 如果任务抛出未捕获异常,整个Timer线程会终止
- 提供schedule()和scheduleAtFixedRate()两种调度方法
提示:Timer适合执行耗时较短的任务。如果任务执行时间较长或可能抛出异常,建议使用ScheduledThreadPoolExecutor。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 标准库Timer的使用详解
2.1 Timer的基本使用方法
让我们通过一个完整示例来了解Timer的基本用法:
java复制import java.util.Timer;
import java.util.TimerTask;
public class TimerDemo {
public static void main(String[] args) throws InterruptedException {
Timer timer = new Timer();
// 延迟1秒后执行的任务
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Task 1 executed at: " + System.currentTimeMillis());
}
}, 1000);
// 延迟2秒后执行的任务
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Task 2 executed at: " + System.currentTimeMillis());
}
}, 2000);
// 延迟3秒后周期性执行的任务,每隔1秒执行一次
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Periodic task executed at: " + System.currentTimeMillis());
}
