阅读量:0
在Java中,Timer
类用于执行一次性或重复的固定延迟任务。它提供了简单易用的API来安排任务在特定的时间执行。
以下是使用Timer
类的基本步骤:
- 创建一个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
类,因为它们提供了更强大和灵活的任务调度功能。