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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值