完整实现 - 通过 DelayQueue 实现延时任务

完整实现 - 通过 DelayQueue 实现延时任务_第1张图片

  • 一、DelayQueue 的应用原理

  • 二、订单延时任务的实现

  • 三、订单处理

  • 四、优缺点

实现延时任务有很多的方法,网上关于延时任务的实现的文章已经不少了。比如:实现延时任务的 10 种方法等等。但是这些文章基本上都是将方法大概的列举一下,给出部分示例代码,对于有经验的老程序员可能一看就知道该怎么去把它实现完整,但是对于初学者来说不够友好。所以,「我打算写一个系列的文章,详细的给出每种延时任务的实现方法、完整实现代码,以及工作原理,欢迎并期待大家关注我」

小概念:什么是延时任务?举个例子:你买了一张火车票,必须在 30 分钟之内付款,否则该订单被自动取消。「订单 30 分钟不付款自动取消,这个任务就是一个延时任务。」

一、DelayQueue 的应用原理

DelayQueue 是一个无界的 BlockingQueue 的实现类,用于放置实现了 Delayed 接口的对象,其中的对象只能在其到期时才能从队列中取走。

  • BlockingQueue 即阻塞队列,java 提供的面向多线程安全的队列数据结构,当队列内元素数量为 0 的时候,试图从队列内获取元素的线程将被阻塞或者抛出异常。

  • 这里的“无界”队列,是指队列的元素数量不存在上限,队列的容量会随着元素数量的增加而扩容。

完整实现 - 通过 DelayQueue 实现延时任务_第2张图片

DelayQueue 实现了 BlockingQueue 接口,所以具有无界、阻塞的特点,除此之外它自己的核心特点就是:

  • 「放入该队列的延时任务对象,只要到达延时时间之后才能被取到」

你可能感兴趣的:(java,程序员,java编程,java,servlet,jvm)