[问与答] 问下 Java 大佬,用了 @async 为什么还要使用线程池

 @Override @Async public void sendTemplateMsg(WxMpTemplateMessage msg,String appid) { TaskExcutor.submit(() -> { String result; try { wxService.switchover(appid); result = wxService.getTemplateMsgService().sendTemplateMsg(msg); } catch (WxErrorException e) { result = e.getMessage(); } //保存发送日志 TemplateMsgLog log = new TemplateMsgLog(msg,appid, result); templateMsgLogService.addLog(log); }); }

代码如上,明明是用了 @async 注解,这个注解的本质不是使用了线程池吗?为什么代码里面还要利用线程池去执行?经过尝试,如果去除 TaskExcutor.submit(),这个函数也能异步执行的,那这么写的目的是什么呢?
这是个开源项目,具体可见 https://github.com/niefy/wx-api/blob/master/src/main/java/com/github/niefy/modules/wx/service/impl/TemplateMsgServiceImpl.java