Skip to content

单机定时任务

通用

  • 时间轮:多个环形队列,一个格子里面放一个任务,类似于时钟
    • 高层的轮子只是计时,底层的轮子放任务,一个轮子是一个链表类似的,绑定多个任务。
    • Kafka 等时间队列很多都有实现。
    • 时间复杂度很低。

Java 专属

  • Timer 类:内部使用 TaskQueue 优先级队列的类存放定时任务,单线程;
  • ScheduledExecutorService接口实现类:线程池+优先队列;
  • DelayQueue类:优先队列
  • Spring Task:线程池,通过@Scheduled 注解即可定义,很简单。

推荐一个在线 Cron 表达式生成器:http://cron.qqe2.com/ 。 **

分布式定时任务

  • Redis:
    • Redis 过期事件监听和 Redission 内置延迟队列
  • MQ:消息队列大多都支持定时投递消息。
  • Quartz:
  • Elastic-Job
  • XXL-JOB
  • PowerJob

正在精进