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
本博客仅为学习道路上的记录,如有不足之处还请帮忙指正