高效开发:Java中Future的使用(Future代表的是异步执行的结果)
1、Future是java 1.5引入的一个interface,可以方便的用于异步结果的获取。
2、Future代表的是异步执行的结果,意思是当异步执行结束之后,返回的结果将会保存在Future中。
那么我们什么时候会用到Future呢? 一般来说,当我们执行一个长时间运行的任务时,使用Future就可以让我们暂时去处理其他的任务,等长任务执行完毕再返回其结果。
经常会使用到Future的场景有:1. 计算密集场景。2. 处理大数据量。3. 远程方法调用等,都是耗时比较长的需要等待的任务。
上代码例子:Controller层
import java.util.concurrent.Future;
/** * 首页异步请求统计接口 * * @return */ @RequestMapping(value = "/getAssetAsyncComponent", method = { RequestMethod.GET }) public BaseResult getAssetAsyncComponent() throws Exception { RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); long currentTimeMillis = System.currentTimeMillis(); Future
下一层加注解异步@Async即可
import org.springframework.scheduling.annotation.AsyncResult;
@Async public Future> countAssetInfoByAssetType(RequestAttributes requestAttributes) { Map resultsMap = new HashMap (); long begin = System.currentTimeMillis(); try { RequestContextHolder.setRequestAttributes(requestAttributes, true); BaseResult baseResult = assetInfoQueryService.countAssetInfoByAssetType(); resultsMap = (Map ) baseResult.getData(); } catch (Exception e) { resultsMap.put("error", "countAssetInfoByAssetType 接口异常"); } long end = System.currentTimeMillis(); System.out.println("countAssetInfoByAssetType 接口 耗时(秒)=" + (end - begin) / 1000.0); return new AsyncResult >(resultsMap); }
也可以去看 https://blog.51cto.com/u_15287666/2976131 此博主的文章