Lambda表达式本身不实现定时任务,仅简化函数式接口写法;真正执行需依赖Timer、ScheduledExecutorService、Spring Task或Quartz等调度框架,其中ScheduledExecutorService配合Lambda是Java原生推荐的轻量级方案。
Java 中 Lambda 表达式本身不直接实现定时任务,它只是简化了 Runnable、Callable 等函数式接口的写法;真正执行定时任务需要依赖定时调度框架(如 Timer、ScheduledExecutorService、Spring Task 或 Quartz),而 Lambda 可以让任务定义更简洁。
ScheduledExecutorService 是 Java 原生推荐的轻量级定时方案,配合 Lambda 能大幅减少模板代码。
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
scheduler.schedule(() -> System.out.println("只执行一次"), 3, TimeUnit.SECONDS);
scheduler.scheduleAtFixedRate(() -> doWork(), 2, 5, TimeUnit.SECONDS);
Spring 的 @Scheduled 不支持直接写 Lambda,但可以封装逻辑到私有方法,再用方法引用“伪装”出类似效果。
private void cleanCache() { cache.clear(); }
@Scheduled(fixedRate = 60_000) public void runCleanTask() { cleanCache(); }
@Scheduled 配合 @Value 或配置中心注入间隔Lambda 在定时任务中看似简洁,但容易忽略生命周期和异常处理问题。
立即学习“Java免费学习笔记(深入)”;
scheduler.shutdown() 并 await 终止,否则 JVM 可能无法正常退出Timer 是老式 API,存在单线程、异常导致整个调度停止等问题,仅适合学习或极简单场景。
new Timer().schedule(new TimerTask() { public void run() { System.out.println("Hello"); } }, 1000);
new Timer().schedule(new TimerTask() { public void run() { doSomething(); } }, 1000);,但本质仍是匿名内部类,Lambda 并未带来实质优势