【发布时间】:2021-06-09 08:53:01
【问题描述】:
我对 ExecutorService 有疑问。
我有Status 的列表,每个状态都包含具有此状态的人员列表。我想做的是
- 检索状态列表
- 我想同时处理所有处于 S 状态的人。
- 状态 S 的处理完成后,我想以相同的方式处理状态 S1,直到处理完所有状态
- 返回所有已处理的人
我有这个代码
ExecutorService threadExecutor = Executors.newFixedThreadPool(10);
List<Status> statusList = getStatusList();
List<PersonInfoWrapper> personInfoWrapperList = new ArrayList<>();
for(Status status: statusList ){
List<PersonInfo> personInfo = status.getPersonList();
List<Future<PersonInfoWrapper> futures = new ArrayList<>();
for(PersonInfo info : personInfo){
Future<PersonInfoWrapper> future = threadExecutor.submit(() -> processInfo(info));
futures.add(future);
}
for(Future<PersonInfoWrapper> future : futures ){
personInfoWrapperList .add(future.get());
}
}
threadExecutor.shutdown();
我的问题是:
-
ExecutorService 有 10 个线程池。但是每个状态的人数都超过 10 个。当我同时处理它时(如第二个for循环所示),然后在第三个for循环中调用future.get(),它不会阻塞ExecutorService中其他任务的执行吗?
-
这样重用ExecutorService可以吗?我不应该为即将处理的每个状态都使用新的执行器服务吗?
【问题讨论】:
-
不,你不应该为每个状态使用新的执行者。
-
@SvetlinZarev 谢谢回答,第一个问题怎么样?
标签: java multithreading threadpool