The invokeAll()
method of the ExecutorService
in Java executes a given list of tasks, and returns a list of Futures
that hold the results of all the tasks.
Let’s consider we have a list of tasks that we wish to execute simultaneously. We are interested in the results of all the tasks.
For example, let’s consider searching for an element in a sorted array. Multiple algorithms can solve this problem. The invokeAll()
method gives us the results of all algorithms that searches the array.
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
Collection<? extends Callable<T>> tasks
: It is the list of tasks to be executed.This method returns a list of futures representing the tasks, in the same sequential order as produced by the iterator for the given task list.
import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Main { private static void sleep(int millis){ try { Thread.sleep(millis); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } private static String algoOne(){ System.out.println("Running algorithm one"); sleep(1000); return "algoOne Result"; } private static String algoTwo(){ System.out.println("Running algorithm two"); sleep(1000); return "algoTwo Result"; } public static void main(String[] args) throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(3); List<Future<String>> taskFutures = executorService.invokeAll(Arrays.asList(Main::algoOne, Main::algoTwo)); taskFutures.forEach(res -> { try { System.out.println("Result - " + res.get()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } }); executorService.shutdown(); } }
sleep()
. This makes the current thread sleep for the specified number of milliseconds.algoOne()
. This method prints Running algorithm one
on the console and makes the current thread sleep for one second, and then returns a string value.algoTwo()
. This method prints Running algorithm two
on the console and makes the current thread sleep for one seconds, and then returns a string value.algoOne()
and algoTwo()
at the same time as the invokeAll
method. We get a list futures called taskFutures
.taskFutures
. We then retrieve the result of each task using the get()
call method, and print it to the console.RELATED TAGS
CONTRIBUTOR
View all Courses