Timer 和 TimerTask 是 Java 中用于进行定时任务调度的类。
-
Timer 的作用:
Timer类允许你调度一个TimerTask(定时任务)以后执行。- 主要用于在未来的某个时间点执行重复性任务或者一次性任务。
-
TimerTask 的作用:
TimerTask是一个抽象类,用于创建一个可以被Timer定时调度的任务。- 你需要继承
TimerTask并实现它的run方法,定义任务的具体逻辑。
-
用法示例:
import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { @Override public void run() { System.out.println("Task is being executed!"); } public static void main(String[] args) { Timer timer = new Timer(); // 创建一个定时任务,延迟5秒后执行,之后每隔1秒执行一次 timer.schedule(new MyTimerTask(), 5000, 1000); // 为了演示,让主线程休眠10秒 try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } // 取消定时任务 timer.cancel(); System.out.println("TimerTask canceled."); } }在上面的示例中,
MyTimerTask继承了TimerTask,并实现了run方法,定义了任务的具体逻辑。在main方法中,通过Timer的schedule方法设置定时任务的执行时间和间隔,然后通过Thread.sleep让主线程休眠10秒,最后取消定时任务。 -
注意事项:
- 尽量避免在
TimerTask的run方法中抛出未捕获的异常,否则可能导致Timer中断。 Timer和TimerTask都不是线程安全的,因此需要在多线程环境中小心使用,或者考虑使用更为灵活的ScheduledExecutorService代替。
- 尽量避免在
总的来说,Timer 和 TimerTask 提供了一种简单的方式来进行定时任务的调度,但在实际应用中,为了获得更灵活的调度和更好的线程安全性,更推荐使用 ScheduledExecutorService。