面试题:什么是 Java 的 Timer?

Java 的 Timer 是一个用于调度任务在指定时间或按固定间隔执行的工具类。它位于 java.util 包中,通常用于安排一次性或重复性的任务。

主要特点:

  1. 单线程执行Timer 使用单个后台线程来执行所有任务。因此,如果一个任务执行时间过长,可能会影响其他任务的执行。
  2. 任务调度:可以安排任务在指定的延迟后执行,或者以固定的时间间隔重复执行。
  3. 任务取消:可以通过 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 是线程安全的,但因为它使用单线程执行任务,所以不适合需要高并发的场景。
  • 异常处理:如果 TimerTaskrun 方法抛出未捕获的异常,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
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容