- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Java实战订单超时自动取消设计方案
前言
在电商、外卖、票务等系统中,订单超时未支付自动取消是一个常见的需求。
这个功能乍一看很简单,甚至很多初学者会觉得:不就是加个定时器么?但真到了实际工作中,细节的复杂程度往往会超乎预期。
这里我们从基础到高级,逐步分析各种实现方案,最后分享一些在生产中常见的优化技巧,希望对你会有所帮助。
1.使用延时队列(DelayQueue)
适用场景:订单数量较少,系统并发量不高。
延时队列是Java并发包(java.util.concurrent)中的一个数据结构,专门用于处理延时任务。
订单在创建时,将其放入延时队列,并设置超时时间。
延时时间到了以后,队列会触发消费逻辑,执行取消操作。
示例代码:
import?java.util.concurrent.*;
public?class?OrderCancelService?{????
private?static?final?DelayQueueOrderTask?delayQueue?=?new?DelayQueue();????
public?static?void?main(String[]?args)?throws?InterruptedException?{????????
//?启动消费者线程????????
new?Thread(()?-?{????????????
while?(true)?{????????????????
try?{????????????????????
OrderTask?task?=?delayQueue.take();?//?获取到期任务????????????????????
System.out.println(取消订单:?+?task.getOrderId());????????????????
}?catch?(InterruptedException?e)?{????????????????????
Thread.currentThread().interrupt();????????????????
}????????????
}????????
}).start();????????
//?模拟订单创建????????
for?(int?i?=?1;?i?=?5;?i++)?{????????????
delayQueue.put(new?OrderTask(i,?System.currentTimeMillis()?+?5000));?//?5秒后取消????????????
System.out.println(订单?+?i?+?已创建);????????
}????
}????
static?class?OrderTask?implements?Delayed?{????????
private?final?long?expireTime;????????
private?final?int?orderId;????????
public?OrderTask(int?orderId,?long?expireTime)?{????????????
this.orderId?=?orderId;????????????
this.expireTime?=?expireTime;????????
}????????
public?int?getOrderId()?{????????????
return?orderId;????????
}????????
@Override????????
public?long?getDelay(TimeUnit?unit)?{????????????
return?unit.convert(expireTime?-?System.currentTimeMillis(),?TimeUnit.MILLISECONDS);????????
}????????
@Override????????
public?int?compareTo(Delayed?o)?{????????????
return?Lpare(this.expireTime,?((OrderTask)?o).expireTime);????????
}????
}
}
优点:
?实现简单,逻辑清晰。
缺点:
?依赖内存,系统重启会丢失任务。
?随着订单量增加,内
您可能关注的文档
- 2018-2019年最新人教版九年级化学下册第十单元-酸和碱期中试卷A4打印.docx
- 2019-2020年度人教版八年级物理下册第十章浮力月考试卷精品.docx
- 2021-2022学年度八年级数学下册模拟测试卷-614.docx
- 2021-2022学年度八年级数学下册模拟测试卷-2221.docx
- 2021-2022学年度八年级数学下册模拟测试卷-3063.docx
- 2021-2022学年度八年级数学下册模拟测试卷-6961.docx
- DeepSeek提示词使用技巧.docx
- Java实现责任链策略模式优雅处理多级请求的方式.docx
- Java线程池原理详解.docx
- Java主流分布式解决方案多场景设计与实战.docx
- 市直机关工委及个人述职述廉2024年党建工作情况报告材料.docx
- 区委书记在2025年一季度经济运行部署会议上的讲话发言材料.docx
- 市直机关单位、卫健委党支部2024年工作述职报告材料.docx
- 市委副书记、市长在2025年市委城乡规划委员会第一次会议上的讲话发言材料.docx
- 某单位领导干部2024年生活会、组织生活会对照检查材料(对照“四个带头”).docx
- 2024年民政局、宣传部、教育局基层主要领导个人述责述廉报告材料.docx
- 2025年2月党支部“三会一课”参考主题方案.docx
- 在某中学2025年春季开学典礼上的讲话:以“三重境界”燃动新学期.docx
- 2024年度领导干部专题民主生活会、组织生活会对照检查材料(四个带头)及学习研讨会上的发言材料.docx
- 市纪委市监委2025年度纪检监察工作计划.docx
最近下载
- 实习生实习合同(标准版).docx
- SENNHEISER森海塞尔促销促销MOMENTUM True Wireless 2使用说明书使用说明 MOMENTUM True Wireless 2.pdf
- 2024年无锡职业技术学院单招数学考试试题及答案解析.docx
- 2025年新教科版三年级下册科学全册知识点.pdf
- 项目安全进度质量管理再提升方案(最终版).pdf VIP
- 2024年山东信息职业技术学院单招职业技能测试题库及答案(历年真题).docx VIP
- 2025年潍坊工程职业学院单招数学考试题库及答案解析.docx
- 标准日本语中级词汇.pdf VIP
- 学校心理健康教育(第2版完整版课件全套电子教案.pptx
- 2022年江西司法警官职业学院单招综合素质考试试题及答案解析.pptx VIP
文档评论(0)