在Java中,Timer
类用于执行一次性或重复的固定延迟任务。它提供了简单易用的API来安排任务在特定的时间执行。
以下是使用Timer
类的基本步骤:
Timer
类的默认构造函数创建一个新的Timer
实例。Timer timer = new Timer();
schedule(TimerTask task, Date delay)
方法安排一个任务在一次指定的延迟后执行。TimerTask task = new MyTask(); // MyTask是一个实现了TimerTask接口的类
Date delay = new Date(System.currentTimeMillis() + 5000); // 5秒后的时间
timer.schedule(task, delay);
安排重复任务:
使用scheduleAtFixedRate(TimerTask task, Date initialDelay, long period)
或scheduleWithFixedDelay(TimerTask task, Date initialDelay, long delay, boolean lastExecutionTime)
方法安排一个任务以固定的频率重复执行。
scheduleAtFixedRate
:在任务之间的固定时间间隔内执行任务。如果任务的执行时间超过了间隔时间,那么下一次任务将在当前任务执行完成后立即开始。scheduleWithFixedDelay
:在任务执行完成后等待固定的时间间隔后再执行下一次任务。TimerTask task = new MyRepeatedTask(); // MyRepeatedTask是一个实现了TimerTask接口的类
Date initialDelay = new Date(System.currentTimeMillis() + 5000); // 5秒后的时间
long period = 10000; // 每隔10秒执行一次
timer.scheduleAtFixedRate(task, initialDelay, period);
或者
TimerTask task = new MyRepeatedTask();
Date initialDelay = new Date(System.currentTimeMillis() + 5000);
long delay = 10000; // 在任务执行完成后等待10秒再执行下一次任务
timer.scheduleWithFixedDelay(task, initialDelay, delay);
cancel()
方法取消一个已安排的任务。如果任务尚未开始,那么它将被完全取消;如果任务已经开始但尚未完成,那么它将在下一次执行时间之前被取消。timer.cancel();
注意:Timer
类是线程安全的,但它的方法不是。如果你需要在多线程环境中使用Timer
,请确保你的代码是线程安全的。
此外,从Java 1.5开始,推荐使用ScheduledExecutorService
接口及其实现类(如ScheduledThreadPoolExecutor
)来替代Timer
类,因为它们提供了更强大和灵活的任务调度功能。