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

 

版权声明:本文为maqingbin8888原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。