• 【Java并发编程】20、DelayQueue实现订单的定时取消


    当订单定时取消需要修改数据库订单状态,但是怎么确定订单什么时候应该改变状态,解决方案有下面两种: 
    第一种,写个定时器去每分钟扫描数据库,这样更新及时,但是如果数据库数据量大的话,会对数据库造成很大的压力。 
    第二种,创建订单的时候再订单表里面创建一条记录,然后把这条记录保存到DelayQueue队列里面,并且用一个子线程不断地轮训这个出队的订单。然后进行订单状态修改的状态。 
    下面是这个方式的实现:

    1)保存订单信息的Bean必须实现Delay接口。Delay里面有两个重要的方法。一个是compareTo,该方法是用来比较队列里面的订单的顺序。另外一个是getDelay,用来判断最前面订单出队的时间。 
    这里写图片描述
    2)创建线程类。去调用对应的Service方法来操作数据库。 
    这里写图片描述 
    3.系统刚一启动就要把数据库里面未付款的订单加载到Queue里面,并且调用线程池生成子线程,这样可以确保子线程出异常后,不会影响到后续的订单处理。启动子线程不断监控要出队的订单。 
    这里写图片描述
    4.当客户取消订单的时候,需要程序从Queue里面删除订单信息。 

    这里写图片描述

    出处:http://blog.csdn.net/zj972535075/article/details/66476495

  • 相关阅读:
    vue动态设置页面title方法
    laravel 只有/login路由403,如何解决
    vue-cli中使用rem,vue自适应
    Vuex的全面用法总结
    template or render function not defined.
    Laravel Mix编译前端资源
    laravel学习:模块化caffeinated
    laravel学习:php写一个简单的ioc服务管理容器
    Aspose Cells dll 实现数据简单下载
    sessionStorage 的使用
  • 原文地址:https://www.cnblogs.com/wangzhongqiu/p/8529342.html
Copyright © 2020-2023  润新知