之前在Springboot学习笔记(一)-线程池的简化及使用中介绍了异步执行的用法, 这在Spring中也是适用的, 本文在其基础上新增几点说明:
ThreadPoolTaskExecutor在提交完任务后不能直接shutdown()–这与ThreadPoolExecutor不同-- 否则会导致后续任务无法提交, 因为在Spring环境下, 为了节省资源, 一般都是共享一个执行器(比如@Async的执行原理), 也就是说它是单例的, 如果确定只执行一次, 可以调用setWaitForTasksToCompleteOnShutdown(true);方法等待任务完成再执行shutdown():ThreadPoolTaskExecutor executor = context.getBean(ThreadPoolTaskExecutor.class); executor.submit(() -> {}); executor.setWaitForTasksToCompleteOnShutdown(true); executor.shutdown();- 相比
ThreadPoolExecutor而言,ThreadPoolTaskExecutor新增了回调机制, 分别包含成功回调和异常回调:executor.submitListenable(runnable).addCallback(res -> System.out.println("success"), Throwable::printStackTrace);
2681

被折叠的 条评论
为什么被折叠?



