Spring-线程池

之前在Springboot学习笔记(一)-线程池的简化及使用中介绍了异步执行的用法, 这在Spring中也是适用的, 本文在其基础上新增几点说明:

  1. ThreadPoolTaskExecutor在提交完任务后不能直接shutdown()–这与ThreadPoolExecutor不同-- 否则会导致后续任务无法提交, 因为在Spring环境下, 为了节省资源, 一般都是共享一个执行器(比如@Async的执行原理), 也就是说它是单例的, 如果确定只执行一次, 可以调用setWaitForTasksToCompleteOnShutdown(true);方法等待任务完成再执行shutdown():
    ThreadPoolTaskExecutor executor = context.getBean(ThreadPoolTaskExecutor.class);
    executor.submit(() -> {});
    executor.setWaitForTasksToCompleteOnShutdown(true);
    executor.shutdown();
    
  2. 相比ThreadPoolExecutor而言, ThreadPoolTaskExecutor新增了回调机制, 分别包含成功回调和异常回调:
    executor.submitListenable(runnable).addCallback(res -> System.out.println("success"), Throwable::printStackTrace);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值