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

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

开发过程中使用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详解

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5682809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)