前言
最近项目中需要在创建订单后15分钟后关闭订单,于是就想到了另外开一个线程等待十五分钟之后去将订单給关闭了,记录实现过程,现在主要用 springboot 框架,防止时间久了忘记了,到时候也好再捡起来。
关键字:spring、ExecutorService、Executors
一、新建线程池
public static ExecutorService threadPool = Executors.newCachedThreadPool();
二、在业务后面加上线程任务
// 开起定时线程任务
System.out.println("线程创建时间:" + new SimpleDateFormat("yyyy-mm-dd HH:mm:ss").format(new Date()));
threadPool.execute(new Runnable() {
public void run() {
try {
Thread.sleep(15 * 60 * 1000);
System.out.println("线程睡眠结束并执行时间:" + new SimpleDateFormat("yyyy-mm-dd HH:mm:ss").format(new Date()));
int status = tradingOrderMapper.selectStatus(outTradeNo);
if (status == 0) { // 未支付状态则关闭订单
close(outTradeNo); // 关闭订单
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
总结
这是利用的 spring 封装的线程池,当然也不只这一种线程池,spring 提供了四种线程池,网上也有很多资料可以查阅,然后根据自己的实际需求选择使用不同的线程池。