@Async注解使用注意
-
一般使用在优化代码, 提高代码效率。 此时就需要抽出 待优化代码块 为单独的方法, 此方法不可与 被调用方 存在于同一Service层, 需另外写一个Service类
-
调用此方法的返回值只有两种情况: 第一种是无返回值(void), 只是单纯的操作数据等。第二种为有返回值, 则必须使用 Future 包装, 否则返回值无效
``` return new AsyncResult<>(xxx) ```
-
调用方获取返回值时需要get其返回值, get()内部可以添加超时时间限制 (get方法需要捕获异常)
try { return future.get(20000, TimeUnit.MILLISECONDS); } catch (Exception e) { logger.error("等待线程返回失败", e); }
-
若循环内调用, 想要达到异步多线程不能直接在循环中get其值,否则会导致其堵塞,等待get返回值
正确方法应为: 在循环外new一个future集合, 调用异步方法后将返回值放入集合中, 最后循环去处理future集合 -
配置线程池