zoukankan      html  css  js  c++  java
  • 使用JAVA DelayQueue做延时队列

    简介:

      DelayQueue是BlockingQueue的一种,所以它是线程安全的,DelayQueue的特点就是插入Queue中的数据可以按照自定义的delay时间进行排序。只有delay时间小于0的元素才能够被取出。

    先看一下DelayQueue的定义:

    public class DelayQueue<E extends Delayed> extends AbstractQueue<E>
        implements BlockingQueue<E>
    

    从定义可以看到,DelayQueue中存入的对象都必须是Delayed的子类。

    Delayed继承自Comparable,并且需要实现一个getDelay的方法。

    DelayQueue的应用: 

      DelayQueue一般用于生产者消费者模式,我们下面举一个取消订单的具体的例子。

      首先要使用DelayQueue,必须自定义一个Delayed对象:

     

    因为DelayQueue的数据是保存在内存中的可能会丢失,这里创建了一个TrOrder的对象用了持久化队列的数据到数据库

     创建一个取消订单的接口,编写具体实现:

     这里编写取消订单的方法

     

     这里就是从项目启动后从数据库中读取有没有缓存的数据,有的话和队列合并,然后由队列取出数据修改订单状态,并且删除对应的缓存数据

    这里创建一个模拟创建订单数据的方法

     然后要想让我们的任务在程序启动后执行需要任务实现CommandLineRunner接口 

    然后启动添加5条数据看下执行效果:

     

     

     可以看到订单到取消时间后会自定执行取消订单的任务.

  • 相关阅读:
    批量修改mp3文件播放速度
    尝试了一下alsa录音播放的编程。
    最快速获取天气的方法
    乒乓Buffer
    GCC编译选项和环境变量
    Linux发行版本
    memcpy 和 memmove
    自动定位android ndk的路径
    记一下,安装和使用Ubuntu过程中遇到的问题
    Android API 和Android 版本对照
  • 原文地址:https://www.cnblogs.com/xuxiaobai13/p/15069349.html
Copyright © 2011-2022 走看看