栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

开发过程中使用FutureTask线程优化并获取执行结果

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

开发过程中使用FutureTask线程优化并获取执行结果

FutureTask

此线程有三种状态:

  1. 未启动
  2. 已启动
  3. 已完成(正常结束、取消而结束、异常结束)

当主线程调用FutureTask对象的get方法时:

  1. 未启动 - 主线程阻塞
  2. 已启动 - 主线程阻塞
  3. 已完成 - 立即返回结果或抛出异常
原始串行执行
List list = new ArrayList<>();
for (String entryId : entryIdList) {
      Object dataDetails = parserDataService.getDataByEntryId(dataType, entryId);
      list.add(dataDetails);
}
 

需要等方法调用完后执行下一个

异步去执行方法
List list = new ArrayList<>();
List> futureTaskList = new ArrayList<>(entryIdList.size());
for (String entryId : entryIdList) {
      FutureTask futureTask =
          new FutureTask<>(() -> parserDataService.getDataByEntryId(dataType, entryId));
      // 去拿线程池跑线程
      poolExecutor.execute(futureTask);
      futureTaskList.add(futureTask);
}
// 取结果
futureTaskList.forEach(
        objectFutureTask -> {
          try {
            list.add(objectFutureTask.get());
          } catch (InterruptedException e) {
            log.error("{}线程中断", Thread.currentThread().getName(), e);
          } catch (ExecutionException e) {
            log.error("{}线程执行异常", Thread.currentThread().getName(), e);
          }
	});
 
FutureTask详解 

FutureTask详解

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号