首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用列表并行调用函数?

如何使用列表并行调用函数?
EN

Stack Overflow用户
提问于 2022-01-21 03:34:17
回答 1查看 406关注 0票数 0

我有一个带有值的列表,我想使用该列表使用executor服务调用一个函数,该函数只有一个参数字符串。例如我有-

代码语言:javascript
运行
复制
private List<String> namesList = new ArrayList<>();

private ExecutorService exeService = Executors.newFixedThreadPool(10);

private void printNames(String name);

我想使用列表值与executor服务并行调用这个函数printNames,也就是说,如果我的列表大小为10,那么对于列表数据,这个函数应该被并行调用。

能否做到,投入将是非常有帮助的?

EN

回答 1

Stack Overflow用户

发布于 2022-01-28 12:12:33

如果您想要为每个列表条目使用executor服务来执行您的方法,您必须首先使您的方法由一个RunnableCallable对象执行:

代码语言:javascript
运行
复制
Runnable task = () -> printNames(name);

然后将其提交给执行者服务:

代码语言:javascript
运行
复制
executorService.submit(task);
代码语言:javascript
运行
复制
class NamePrinter {
  public static void main(String[] args) {
    List<String> names = List.of("Qui-Gon Jinn", "Mace Windu", "Ahsoka Tano", "Plo Koon", "Kit Fisto", "Aalya Secura");
    ExecutorService executorService = Executors.newFixedThreadPool(10);
    for (String name : names) {
      executorService.submit(() -> printName(name));
    }
    executorService.shutdown();
  }

  public static void printName(String name) {
    System.out.println(name + " was executed by " + Thread.currentThread().getName());
  }
}

您应该考虑使用parallelStream并行处理列表:

代码语言:javascript
运行
复制
names.parallelStream().forEach(NamePrinter::printName);

这将在幕后使用ForkJoinPool执行器服务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70796081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档