DelayQueue 订单限时支付实例
1.订单实体
package com.zy.entity; import java.util.Date;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit; public class Order implements Delayed { String id;
String name;// 订单名称
Date creatTime;// 创建时间
int seconds; // 有效期n秒
Date endTime;// 过期时间 public Order(String id, String name, Date creatTime, int seconds) {
super();
this.id = id;
this.name = name;
this.creatTime = creatTime;
this.seconds = seconds;
this.endTime = new Date(creatTime.getTime() + seconds * 1000);// 过期时间
} // 排序(插入时根据这个方法排序)
@Override
public int compareTo(Delayed o) {
Order order = (Order) o;
return this.seconds - order.seconds > 0 ? 1 : (this.seconds - order.seconds < 0 ? -1 : 0);
} // 激活日期的剩余时间,时间单位由单位参数指定
@Override
public long getDelay(TimeUnit unit) {
long l = this.getEndTime().getTime() - System.currentTimeMillis();
return unit.convert(l,TimeUnit.MILLISECONDS);
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Date getCreatTime() {
return creatTime;
} public void setCreatTime(Date creatTime) {
this.creatTime = creatTime;
} public int getSeconds() {
return seconds;
} public void setSeconds(int seconds) {
this.seconds = seconds;
} public Date getEndTime() {
return endTime;
} public void setEndTime(Date endTime) {
this.endTime = endTime;
} }
2.下订单
package com.zy.service; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Stack;
import java.util.concurrent.DelayQueue; import com.zy.entity.Order; public class OrderService implements Runnable {
// delay队列(先进先出)
DelayQueue<Order> queue = new DelayQueue<Order>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 添加订单(向队列中添加数据)
public void insertOder(Order order) {
System.out.println("向队列中添加订单(" + order.getName() + ")。。。。添加时间(" + sdf.format(order.getCreatTime()) + ")。。。。。"
+ "过期时间:" + sdf.format(order.getEndTime()));
queue.put(order);
} // 订单过期时间
@Override
public void run() {
while (true) {
System.out.println("检查");
try {
Order order = queue.take();// 当队列取出为空时,线程堵塞
if (order != null) {
System.out.println(order.getName() + "订单支付时间过期" + sdf.format(new Date()));
} else {
System.out.println("无过期订单");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} public static void main(String[] args) throws InterruptedException {
// 启动线程
OrderService orderService = new OrderService();
new Thread(orderService).start();
// 项队列中添加数据
Order order1 = new Order("1", "订单一", new Date(), 50);
Order order2 = new Order("2", "订单2", new Date(), 30);
Order order3 = new Order("1", "订单3", new Date(), 40);
orderService.insertOder(order1);
orderService.insertOder(order2);
orderService.insertOder(order3);
Thread.currentThread().sleep(35000);
Order order4 = new Order("4", "订单4", new Date(), 10);
orderService.insertOder(order4); }
}
3:结果
DelayQueue 订单限时支付实例的更多相关文章
- PHP原生代码写的微信扫码支付实例
		一款PHP原生代码写的微信扫码支付,不基于任何框架,完全手写. 扫码支付只要授权域名对就OK,本地是无法测试.跟openid也没有关系,所以跟支付授权目录页没关系. 微信商户信息配置地址:weixin ... 
- Java 编程 订单、支付、退款、发货、退货等编号主动生成类
		订单.支付.退款.发货.退货等编号主动生成类 在商城网站中,订单编号的自动生成,ERP中各个单据的编号自动生成,都可以按照一下的方式来自动生成. 第一步:定义常量订单编号前缀.订单编号起始数.订单编号 ... 
- html5手机浏览器启动微信客户端支付实例
		html5手机浏览器启动微信客户端支付实例,外部浏览器html5微信支付技术,如何在手机浏览器微信支付,在微信客户端外的移动端网页使用微信支付 首先在微信支付官网https://pay.weixin. ... 
- 苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功
		苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功 这是苹果wwdc2021 推出的新功能 参考官网链接 App Store Server API | Apple Deve ... 
- Java 实现订单未支付超时自动取消
		在电商上购买商品后,如果在下单而又没有支付的情况下,一般提示30分钟完成支付,否则订单自动.比如在京东下单为完成支付: 超过24小时,就会自动取消订单,下面使用 Java 定时器实现超时取消订单功能. ... 
- 微信支付之01------获取订单微信支付二维码的接口------Java实现
		[ 前言:以前写过一个获取微信二维码支付的接口,发现最近公司新开的项目会经常用到,现在我又翻出代码看了一遍,觉得还是把整个代码流程记下来的好 ] 借鉴博客: 他这篇博客写得不错,挺全的:https:/ ... 
- Orchard模块开发全接触7:订单与支付之Event Bus
		在这部分,我们要完成的工作有: 1:将购物车内的商品变成真正的订单: 2:理解 父子及一对多关系: 3:写一个针对 Event Bus 的扩展点: 4:实现一个针对该扩展点的模拟的 支付服务: 一:创 ... 
- 多线程demo,订单重复支付
		背景描述,一个商城网站,一个订单支付方案有多个1.金额支付2.积分支付3.工资支付(分期和全额),所以一个订单的方案可能有1:有1.2,或1.2.3 状态,1.订单状态,2,支付状态==>多方案 ... 
- PHP浮点数运算精度造成的,订单金额支付经常少1分的问题
		最近碰见一个奇怪的问题,商城通过微信支付的订单经常少一分钱,经过排查是PHP浮点运算精度问题造成的 由PHP浮点数运算精度造成的,鸟哥的Bolg有详细的说明.http://www.laruence.c ... 
随机推荐
- Oracle EBS AP 发票放弃行
			-- purpose: 应付发票放弃发票行 -- 12.2.6 环境 -- author:jenrry create_date: 2017-06-07 declare l_dummy_msg VARC ... 
- tail 尾巴
			tail用法:尾巴,取文件的最后N行,默认前10行, -n 2 取前2行-n 2,简写就是-2 -f 文件 跟踪一个文件尾部的时时变化. 克隆出一个窗口执行:循环脚本:for n in `seq 1 ... 
- python  函数闭包()
			闭包(closure) 当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,当内部函数被当做返回值的时候,相关参数和变量保存在返回函数中,这种结果,叫闭包 example1: de ... 
- CentOS7中部署Showdoc
			目录 CentOS7中部署Showdoc 前置环境 部署 配置文件 解压安装包 添加启动服务 设置权限 运行安装 界面 CentOS7中部署Showdoc 文:铁乐与猫 前置环境 因为showdoc其 ... 
- October 12th 2017 Week 41st Thursday
			Be happy for this moment. This moment is your life. 为这一刻感到高兴,这一刻是你的人生. Yesterday Tencent became Asia ... 
- 团队作业——Alpha冲刺2/12
			团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:主要学习JAVA语言,以及加入了Android开发内容的学习. 明日任务:安装Android Studio以及通过观看视频和阅读材料的形式 ... 
- Lombok 继承时应注意的点
			lombok项目的产生就是为了省去我们手动创建getter和setter等基本方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter等方法.即它最终能够达到的效果是:在源码中没 ... 
- PyQt5--QCalendar
			# -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ... 
- python string.md
			string 包含用于处理文本的常量和类.string模块始于Python的最早版本. 2.0版本中, 许多之前只在模块中实现的函数被转移为string对象的方法. 之后的版本中, 虽然这些函数仍然可 ... 
- solr的随机排序 【转载】
			原文地址:http://blog.csdn.net/duck_genuine/article/details/8477336 有这样的一种需求,想从索引库里随机取出4条记录. 在 schema.xml ... 
 
			
		