Java.util.concurrent.ExecutorService Interface with Examples Last Updated : 13 May, 2022 Comments Improve Suggest changes Like Article Like Report The ExecutorService interface extends Executor by adding methods that help manage and control the execution of threads. It is defined in java.util.concurrent package. It defines methods that execute the threads that return results, a set of threads that determine the shutdown status. The ExecutorService interface is implemented in a utility class called Executors. It defines methods that provide an implementation of the ExecutorService interface and many other interfaces, with some default settings. The class hierarchy is as follows: --> java.util.concurrent Package --> Interface ExecutorService Class Note: ScheduledExecutorService is Implementing Sub-Interfaces and classes implemented are as follows: AbstractExecutorServiceForkJoinPoolScheduledThreadPoolExecutorThreadPoolExecutorMethods in Executor InterfaceMethodAction PerformedawaitTermination()Waits for all the tasks to complete their execution after a shutdown request is found. It waits for the time specified by the timelimit argumentinvokeAll()Executes all the tasks contained in the collection. The list of Future objects is returned which contains the status and return values of the various tasks invokeAny()Executes all the tasks contained in the collection. On completion of any single task it returns its result and all the other tasks are canceled.isShutdown()Tells whether the invoking executor is shut down or not. Returns true if shutdown otherwise returns falseisTerminated()Checks if all the tasks have been completed post-shutdown. Return true if completed, otherwise returns false.shutdown()Causes all the currently executing tasks to terminate after completion in the order in which they were started and rejects any new incoming tasks.shutdownNow()Forcefully terminates all the tasks, regardless of their current state i.e running, waiting, or ready. The lists of tasks were in a ready state in return.submit()Adds a task that returns a result to the list of executing tasks for execution. It returns a Future object which returns the result of the task after completion Implementation: Executors Java // Java Program to Demonstrate ExecutorService Interface // Importing required classes import java.util.concurrent.*; // Class // Main class public class SimpleExecutor { // Main driver method public static void main(String[] args) { // Creating objects of CountDownLatch class CountDownLatch cd1 = new CountDownLatch(5); CountDownLatch cd2 = new CountDownLatch(5); CountDownLatch cd3 = new CountDownLatch(5); CountDownLatch cd4 = new CountDownLatch(5); // Creating objects of ExecutorService class ExecutorService es = Executors.newFixedThreadPool(2); // Display message only for better readability System.out.println("Starting"); // Executing the tasks es.execute(new MyThread(cd1, "A")); es.execute(new MyThread(cd2, "B")); es.execute(new MyThread(cd3, "C")); es.execute(new MyThread(cd4, "D")); // Try block to check for exceptions try { // Waiting for tasks to complete cd1.await(); cd2.await(); cd3.await(); cd4.await(); } // Catch block to handle exceptions catch (InterruptedException e) { System.out.println(e); } // Making all current executing threads to terminate es.shutdown(); // Display message only for better readability System.out.println("Done"); } } // Class 2 // Helper class class MyThread implements Runnable { // Class data members String name; CountDownLatch latch; // Constructor MyThread(CountDownLatch latch, String name) { // this keyword refers to current instance itself this.name = name; this.latch = latch; new Thread(this); } // Method // Called automatically when thread is started public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + ": " + i); latch.countDown(); } } } Output: Comment More infoAdvertise with us Next Article Java.util.concurrent.ExecutorService Interface with Examples C CharchitKapoor Follow Improve Article Tags : Java Java - util package Java-concurrent-package Practice Tags : Java Similar Reads Java.util.concurrent.Executor interface with Examples The concurrent API in Java provides a feature known as an executor that initiates and controls the execution of threads. As such, an executor offers an alternative to managing threads using the thread class. At the core of an executor is the Executor interface. It refers to the objects that execute 1 min read Java.util.concurrent.Exchanger class with Examples Exchanger is the most interesting synchronization class of Java. It facilitates the exchange of elements between a pair of threads by creating a synchronization point. It simplifies the exchange of data between two threads. Its operation is simple: it simply waits until two separate threads call its 3 min read Java.util.concurrent.Phaser class in Java with Examples Phaser's primary purpose is to enable synchronization of threads that represent one or more phases of activity. It lets us define a synchronization object that waits until a specific phase has been completed. It then advances to the next phase until that phase concludes. It can also be used to synch 7 min read ConcurrentMap Interface in Java The ConcurrentMap Interface is part of the Java Collections Framework and was introduced in JDK 1.5. It is designed for thread-safe concurrent access to its entries without compromising the consistency of the map. The interface resides in the java.util.concurrent package and extends the Map interfac 9 min read Java.util.concurrent.RecursiveTask class in Java with Examples RecursiveTask is an abstract class encapsulates a task that returns a result. It is a subclass of ForkJoinTask. The RecursiveTask class is extended to create a task that has a particular return type. The code that represents the computational portion of the task is kept within the compute() method o 2 min read Java.util.concurrent.RecursiveAction class in Java with Examples RecursiveAction is an abstract class encapsulates a task that does not return a result. It is a subclass of ForkJoinTask, which is an abstract class representing a task that can be executed on a separate core in a multicore system. The RecursiveAction class is extended to create a task that has a vo 3 min read ConcurrentSkipListMap in Java with Examples The ConcurrentSkipListMap class is a member of the Java Collections Framework. It was introduced in JDK 1.6, it belongs to java.util.concurrent package. The ConcurrentSkipListMap is a scalable implementation of ConcurrentNavigableMap. All the elements are sorted based on natural ordering or by the C 10 min read ConcurrentLinkedDeque poll() method in Java with Example The poll() method of ConcurrentLinkedDeque returns the front element in the Deque container and deletes it. It returns null if the container is empty. Syntax: public E poll() Parameters: This method does not accept any parameters. Returns: This method returns front element of the Deque container if 2 min read ConcurrentLinkedDeque offer() method in Java with Examples The java.util.concurrent.ConcurrentLinkedDeque.offer() method is an inbuilt method in Java which inserts the specified element, passed as a parameter, to the deque. Syntax: public boolean offer(E elem) Parameters: The method accepts a parameter elem which species the element to be inserted to the de 2 min read ConcurrentLinkedDeque push() method in Java with Examples The push() method of ConcurrentLinkedDeque class is an in-built function in Java which pushes an element onto the stack represented by this deque (in other words, at the head of this deque) if it is possible to do so immediately without violating capacity restrictions, returning true upon success an 2 min read Like