ExecutorService是concurrent并发包下的一个接口,对ExecutorService的实现就是一个线程池的实现。
ExecutorService的invokeAny方法要求传入的参数类型是Callable类型的集合,其返回类型即为向Callable<V>传入的泛型类型V,返回的值是随机从线程集合中选择一个线程的返回值,但是传入的线程都会被执行,并不是随机选取一个执行。
示例:
public class DemoMain {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(5);
Set<Callable<String>> callables = new HashSet<Callable<String>>();
callables.add(new Callable<String>() {
public String call() throws Exception {
System.out.println(1);
return "Task 1";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
System.out.println(2);
return "Task 2";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
System.out.println(3);
return "Task 3";
}
});
String result = executorService.invokeAny(callables);
System.out.println("result = " + result);
executorService.shutdown();
}
}
返回值:
1
2
3
result = Task 1
本博客仅为学习道路上的记录,如有不足之处还请帮忙指正
本文详细介绍了Java并发包中的ExecutorService接口的invokeAny方法,该方法用于执行Callable任务集合,返回最先完成的任务结果。示例代码展示了如何创建线程池并提交多个Callable任务,所有任务都会执行,返回值为其中一个任务的结果。博客探讨了并发编程中的线程池使用和任务执行策略。

2958

被折叠的 条评论
为什么被折叠?



