ScheduledExecutroService_订单失效
延时执行
@Bean
ScheduledExecutorService defaultScheduler() {
return Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
}
@Autowired
private ScheduledExecutroService defaultScheduler;
延时使用
TOrder order = event.getOrder();
long delay = order.getExpireTime().getTime() - System.currentTimeMillis();
if (delay > 0) {
//主要执行的方法
defaultScheduler.schedule(() -> orderService.makeOrderExpired(order), delay, TimeUnit.MILLISECONDS);
} else {
log.warn("order {} already expired after creation", order.getId());
orderService.makeOrderExpired(order);
}
ScheduledExecutorService的创建与使用
关于scheduleAtFixedRate参考说明:
https://blog.csdn.net/maqingbin8888/article/details/81480508
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(
//ThreadFactory 线程工厂
new ThreadFactory() {
private final AtomicInteger threadIndex = new AtomicInteger(0);
@Override
public Thread newThread(final Runnable r) {
Thread thread = new Thread(r);
thread.setName("myThread Name_" + threadIndex.incrementAndGet());
thread.setDaemon(true);//守护线程
return thread;
}
});
ScheduledFuture scheduledFuture = service.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
DateTime dateTime= new DateTime(new Date());
System.out.println(Thread.currentThread().getName()+" "+dateTime.toString("yyyy-MM-dd HH:mm:ss"));
}
}, 0, 1, TimeUnit.SECONDS); //1秒钟执行一次
取消线程池
private void closeExecutorService(ExecutorService executorService) {
if (executorService == null) {
return;
}
executorService.shutdown();
try {
if (!executorService.awaitTermination( 5000, TimeUnit.MILLISECONDS)) {
executorService.shutdownNow();
if (!executorService.awaitTermination( 5000,TimeUnit.MILLISECONDS)) {
//logger.warn(String.format("%s didn't terminate ! ",executorService));
}else{
// logger.info( "Druid创建连接的线程池正常关闭");
}
}else{
// logger.info( "Druid创建连接的线程池正常关闭");
}
} catch (InterruptedException e) {
executorService.shutdownNow();
Thread.currentThread() .interrupt();
}
}
源码解读
https://blog.csdn.net/luanmousheng/article/details/77816412