此线程有三种状态:
当主线程调用FutureTask对象的get方法时:
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详解
上一篇 intValue的用法
下一篇 【Spark】Exception in thread “main“ java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)
版权所有 (c)2021-2022 MSHXW.COM
ICP备案号:晋ICP备2021003244-6号