Post

定时任务的实现方案

1、PriorityBlockingQueue + Polling

  • PriorityBlockingQueue 为优先队列

  • 生产者随机往队列中发送消息

  • 消费者轮询获取消息并消费

    1
    
    缺点:轮询的时间间隔不好控制,时间间隔太长,任务无法及时处理,间隔太短,消耗CPU
    

PriorityBlockingQueue + 时间差

  • 生产者往队列中发送消息

  • 消费者从队列尾部取出消息,计算时间差,然后sleep()

    1
    
    缺点:若队尾的元素的sleep时间过长,而队列中的消息的执行时间短,会导致队中消息不可被执行
    

DelayQueue(延时消息)

  • 消费者向消息队列发送带有延时时间的消息

时间轮(HashedWheelTimer)

  • 单位时间后,指针指向环形队列的下一个元素
  • 指针指向的位置,取出该位置的元素集合并执行
This post is licensed under CC BY 4.0 by the author.