我有一个带有值的列表,我想使用该列表使用executor服务调用一个函数,该函数只有一个参数字符串。例如我有-
private List<String> namesList = new ArrayList<>();
private ExecutorService exeService = Executors.newFixedThreadPool(10);
private void printNames(String name);
我想使用列表值与executor服务并行调用这个函数printNames,也就是说,如果我的列表大小为10,那么对于列表数据,这个函数应该被并行调用。
能否做到,投入将是非常有帮助的?
发布于 2022-01-28 04:12:33
如果您想要为每个列表条目使用executor服务来执行您的方法,您必须首先使您的方法由一个Runnable
或Callable
对象执行:
Runnable task = () -> printNames(name);
然后将其提交给执行者服务:
executorService.submit(task);
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
并行处理列表:
names.parallelStream().forEach(NamePrinter::printName);
这将在幕后使用ForkJoinPool
执行器服务。
https://stackoverflow.com/questions/70796081
复制