---
title: The Executor Framework – Part IV
description: The Executor Framework – Part IV
---

[![e-Zest logo\_An accion lab company\_Colour](https://blog.e-zest.com/hubfs/images/Logos%20with%20Tagline/Corporate/SVG/e-Zest%20logo_An%20accion%20lab%20company_Colour.svg "e-Zest logo_An accion lab company_Colour")](https://www.e-zest.com/)

- [WORK](https://www.e-zest.com/our-work)
- [SERVICES](https://www.e-zest.com/our-services) 
    - [Product Engineering](https://www.e-zest.com/digital-product-engineering-services)
    - [Enterprise Data Services](https://www.e-zest.com/enterprise-data-services)
    - [Digital Commerce](https://www.e-zest.com/digital-commerce-services)
    - [Digital Operations](https://www.e-zest.com/digital-operations)
    - [Digital Consulting](https://www.e-zest.com/digital-transformation-consulting-services)
    - [Digital Experience Design](https://www.e-zest.com/digital-experience-design)
- [INSIGHTS](https://blog.e-zest.com/)
- [CAREERS](https://www.e-zest.com/careers)
- [ENTERPRISE DATA SERVICES](https://www.e-zest.com/enterprise-data-services)
- [GENERATIVE AI](https://www.e-zest.com/generative-ai)
- [Healthcare](https://healthcare.e-zest.com)
- [Contact Us](https://www.e-zest.com/contact-us)

- ![Elevating Product Engineering with AI and ML](https://blog.e-zest.com/hubfs/Elevating%20Product%20Engineering%20with%20AI%20and%20ML.jpg)

  [BLOGS](https://blog.e-zest.com)
  
  #### Elevating Product Engineering with AI and ML

  As technology evolves and customer choices broaden, there is an increasing ...

  [Read more](https://blog.e-zest.com/elevating-product-engineering-with-ai-and-ml)
- ![e-Zest – An Accion Labs Company gets Recognition as a Contender in the ISG Provider Lens™ Study on Digital Engineering Services 2024](https://blog.e-zest.com/hubfs/e-Zest%20%E2%80%93%20An%20Accion%20Labs%20Company%20-%20Gets%20Recognition%20as%20a%20Contender%20in%20the%20ISG%20Provider%20LensTM%20Study%20on%20Digital%20Engineering%20Services%202024.jpg)

  [NEWS](https://blog.e-zest.com/news)
  
  #### e-Zest – An Accion Labs Company gets Recognition as a Contender in the ISG Provider Lens™ Study on Digital Engineering Services 2024

  We are delighted to announce that e-Zest – An Accion Labs Company has been ...

  [Read more](https://blog.e-zest.com/news/e-zest-an-accion-labs-company-gets-recognition-as-a-contender-in-the-isg-provider-lens-study-on-digital-engineering-services-2024)
- ![e-Zest Solutions supports Digital Pune Mission](https://blog.e-zest.com/hubfs/blog-files/Digital%20Literacy%20Bus%20e-Zest.png)

  [CSR](https://blog.e-zest.com/csr)
  
  #### e-Zest Solutions supports Digital Pune Mission

  **Pune, India:** e-Zest Solutions, a leading digital technology innovation ...

  [Read more](https://blog.e-zest.com/csr/e-zest-solutions-supports-digital-pune-mission)

- [Work](https://www.e-zest.com/our-work)
- [Services](https://www.e-zest.com/our-services)
- [Insights](https://blog.e-zest.com)
- [Careers](https://www.e-zest.com/careers)
- [Enterprise Data](https://www.e-zest.com/enterprise-data-services)
- [Generative AI](https://www.e-zest.com/generative-ai)
- [Innovations](https://www.e-zest.com/innovations)
- [Healthcare](https://healthcare.e-zest.com)
- [About](https://www.e-zest.com/about-us)
- [Contact](https://www.e-zest.com/contact-us)

- [Blog](https://blog.e-zest.com/)
- [News](https://blog.e-zest.com/news)
- [CSR](https://blog.e-zest.com/csr)

- [![Linkedin Icon](https://blog.e-zest.com/hubfs/icons/linkedin_icon_white.svg)](https://www.linkedin.com/company/e-zest-solutions/)
- [![Twitter Icon](https://blog.e-zest.com/hubfs/twitter-logo-silhouette%20(5).svg)](https://twitter.com/ezest)
- [![Facebook Icon](https://blog.e-zest.com/hubfs/facebook-app-logo%20(4).svg)](https://www.facebook.com/61259256638)
- [![Instagram Icon](https://blog.e-zest.com/hubfs/instagram-logo%20(4).svg)](https://www.instagram.com/ezestsolutions/)
- [![Youtube Icon](https://blog.e-zest.com/hubfs/icons/youtube_icon_white.svg)](https://www.youtube.com/user/ezestcorporate)

[![Go to top icon](https://blog.e-zest.com/hubfs/AA%20Assets/top%20button.svg)](https://blog.e-zest.com/the-executor-framework-part-iv/#top)

Hit enter to search or ESC to close

Insights

e-Zest members share technology ideas to foster digital transformation.

- [Blog](https://blog.e-zest.com)
- [News](https://blog.e-zest.com/news)
- [Podcasts](https://www.e-zest.com/podcasts)
- [Healthcare](https://blog.e-zest.com/healthcare)
- [CSR](https://blog.e-zest.com/csr)
- [Whitepaper](https://blog.e-zest.com/whitepaper)
- [Playbook](https://blog.e-zest.com/playbook)
- [Media Kit](https://www.e-zest.com/media-kit)

# The Executor Framework – Part IV

[Madhura Oak](https://blog.e-zest.com/author/madhura-oak)  Feb 25, 2013

[Java](https://blog.e-zest.com/topic/java) [ExecutorService](https://blog.e-zest.com/topic/executorservice) [Callable](https://blog.e-zest.com/topic/callable) [Multithreading](https://blog.e-zest.com/topic/multithreading) [Concurrency API](https://blog.e-zest.com/topic/concurrency-api) [Future](https://blog.e-zest.com/topic/future) [Technology](https://blog.e-zest.com/topic/technology)

- <https://www.linkedin.com/shareArticle?mini=true&url=https://blog.e-zest.com/the-executor-framework-part-iv/&title=&summary=&source=>
- <https://twitter.com/intent/tweet?source=https://blog.e-zest.com/the-executor-framework-part-iv/&text=The%20Executor%20Framework%20–%20Part%20IV>
- <https://www.facebook.com/sharer/sharer.php?u=https://blog.e-zest.com/the-executor-framework-part-iv/>
- <https://www.instagram.com/ezestsolutions/?u=https://blog.e-zest.com/the-executor-framework-part-iv/>

In the Part III of [Executor Framework](https://blog.e-zest.com/blog/the-executor-framework-part-iii/) blog post series, I had written about [`Callable`](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html) interface, creating Callable task and assigning a timeout to `ExecutorService` after shutdown.

In this blog post, I am writing about use of `ExecutorService` to submit multiple `Callable` tasks for bulk execution and assigning a timeout to Callable tasks submitted for bulk execution.

**Submitting Callable tasks for bulk execution**

The `invokeAll(Collection<? extends Callable<T>> tasks)` method of `ExecutorService` enables submitting a collection of `Callable<T>` tasks for execution. This method returns `List<Future<T>>` which contains `Future<T>` objects to get the result of all `Callable<T>` tasks after all the tasks in the collection are executed. The `Callable` tasks submitted to this method may either be executed normally or may have thrown an exception.

The order of `Future<T>` objects in the returned list is same as the `Callable<T>` tasks in the collection. The `get()` method of `Future<T>` can be called to get its return value. If the task threw an exception during execution, the `get()` method throws `ExecutionException`.

The collection submitted to this method should not be modified after it is called. To ensure this, the `Collections.unmodifiableCollection(Collection<? extends T> c)` method can be called to get an unmodifiable collection which can be passed to the `invokeAll` method.

The thread which calls the `invokeAll` method can be interrupted while waiting. If it is interrupted, it throws `InterruptedException` and cancels all unfinished tasks.

A `Callable` task which computes the sum of numbers is given in Listing 1.

```
public class ComputeSum implements Callable<Integer> {
    private List<Integer> numbers;

    public void setNumbers(List<Integer> numbers) {
        this.numbers = numbers;
    }

    public Integer call() throws Exception {
        int sum = 0;
	for(Integer number : numbers) {
	    System.out.println("Adding number : " + number);
	    sum += number;
	}
	return sum;
    }
}
```

Listing 1. A Callable task which computes sum of numbers

Listing 2 shows a code which submits a collection of `Callable` tasks to `ExecutorService` for bulk execution.

```
//Generate 30 random numbers in the range of 0 to 100
Random randomGenerator = new Random();
List<Integer> numbers = new ArrayList<Integer>();
for(int i=1; i <= 30; i++) {
    numbers.add(randomGenerator.nextInt(100));
}

ExecutorService service = Executors.newSingleThreadExecutor();

//create three tasks and assign the numbers to them
ComputeSum task1 = new ComputeSum();
ComputeSum task2 = new ComputeSum();
ComputeSum task3 = new ComputeSum();

//first task computes sum of 1 through 10 numbers in the list
task1.setNumbers(numbers.subList(0, 10));

//second task computes sum of 11 through 20 numbers in the list
task2.setNumbers(numbers.subList(10, 20));

//third task computes sum of remaining numbers
task3.setNumbers(numbers.subList(20, 30));

boolean allTasksCompletedNormally = true;

//create a collection of tasks
Collection<ComputeSum> collection = new ArrayList<ComputeSum>();
collection.add(task1);
collection.add(task2);
collection.add(task3);

//submit the tasks for execution using unmodifiable collection
try {
    List<Future<Integer>> futures =
        service.invokeAll(
        Collections.unmodifiableCollection(collection));

    int sum = 0;

    //Get the result of all tasks
    for(Future<Integer> future : futures) {
        try {
	    sum += future.get();
	}
	catch (ExecutionException e) {
	    allTasksCompletedNormally = false;
	}
    }

    //print sum only if all tasks are executed normally
    if(allTasksCompletedNormally) {
        System.out.println("Sum = " + sum);
    }
    else {
        System.out.println("Some task threw an exception. ");
    }
}
catch (InterruptedException e) {
    e.printStackTrace();
}
```

Listing 2. Code which submits multiple Callable tasks for bulk execution

**Assigning a timeout for all Callable tasks**

The `invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)` method of `ExecutorService` can be called to assign a maximum time period to wait for all the tasks to complete execution. This method stops execution and returns a `List` when all `Callable` tasks in the collection are executed normally or with exception. It throws `CancellationException` when the timeout period elapses before completion of all tasks. The thread calling this method can be interrupted to stop execution of tasks. If the thread is interrupted, this method throws `InterruptedException`. The execution of tasks is stopped when `CancellationException` or `InterruptedException` is thrown by this method.

- <https://twitter.com/intent/tweet?source=https://blog.e-zest.com/the-executor-framework-part-iv/&text=The%20Executor%20Framework%20–%20Part%20IV>
- <https://www.facebook.com/sharer/sharer.php?u=https://blog.e-zest.com/the-executor-framework-part-iv/>
- <https://www.linkedin.com/shareArticle?mini=true&url=https://blog.e-zest.com/the-executor-framework-part-iv/&title=&summary=&source=>

### Similar Blog

[![How to Create Own Custom JMeter Template?](https://blog.e-zest.com/hubfs/How%20to%20Create%20Own%20Custom%20JMeter%20Template%201280x667%202560x1334.jpg) How to Create Own Custom JMeter Template? We frequently need to construct Test Plans with a similar format when working on web application performance testing using Apache ... By Kishore Bhamare Feb 28, 2023](https://blog.e-zest.com/how-to-create-own-custom-jmeter-template)

[![Hoisting in JavaScript](https://blog.e-zest.com/hubfs/Blog_Files/Hoisting%20in%20JavaScript-190225.png) Hoisting in JavaScript Generally, we all have heard of the term ‘hoisting’ with reference to flag hoisting. By Ajit Sakhare Feb 26, 2019](https://blog.e-zest.com/hoisting-in-javascript)

[![OWASP ZAP Modes](https://blog.e-zest.com/hubfs/OWASP%20ZAP%202.5.0.png) OWASP ZAP Modes OWASP ZAP is an open-source web security testing tool, used for detecting vulnerabilities in web applications.ZAP provides you ... By Kishore Bhamare Dec 22, 2016](https://blog.e-zest.com/owasp-zap-modes)

[![Automation using Selenium WebDriver Frameworks](https://blog.e-zest.com/hubfs/Selenium_blog_image.png) Automation using Selenium WebDriver Frameworks Frameworks help to structure our code and make the maintenance process easy. Without frameworks we will place all our code and ... By Uddhav Naik Sep 26, 2016](https://blog.e-zest.com/automation-using-selenium-webdriver-frameworks)

[Tutorial: Elasticsearch Integration in a Java Application The whole world relies on search to get access to relevant information and data. Handling this large amount of data presents a ... By Jyoti Agrawal Jun 11, 2015](https://blog.e-zest.com/tutorial-elasticsearch-integration-in-a-java-application/)

[Oracle NoSQL Database (ONDB) Relational databases have been around us for more than 20 years now. Needless to say, they are mature and an obvious choice for ... By Madhura Oak Dec 24, 2013](https://blog.e-zest.com/oracle-nosql-database-ondb/)

[Session State Isolation Techniques Isolation of data in a session is the trickiest part of session management. A session may constitute of multiple requests. ... By Madhura Oak Dec 02, 2013](https://blog.e-zest.com/session-state-isolation-techniques/)

[Session Management There are three ways of session management in n-tier applications: By Madhura Oak Nov 27, 2013](https://blog.e-zest.com/session-management/)

[Transaction and Query timeout Performance is one of the non-functional requirements of an application. It defines the acceptable maximum response time for ... By Madhura Oak Nov 25, 2013](https://blog.e-zest.com/transaction-and-query-timeout/)

[![Multiple Inheritance in Domain Model Design](https://blog.e-zest.com/hs-fs/file-3586010320-png/blog-files/uml-class-diagram-%E2%80%93-bridge-pattern.png) Multiple Inheritance in Domain Model Design While using multiple inheritance in domain model design you need to be cautious as programming languages such as Java do not ... By Madhura Oak Nov 13, 2013](https://blog.e-zest.com/multiple-inheritance-in-domain-model-design/)

## Helping Organizations Thrive in the Digital Age

[Contact Us](https://www.e-zest.com/contact-us)

- [About](https://www.e-zest.com/about-us)
- [Services](https://www.e-zest.com/our-services)
- [Work](https://www.e-zest.com/our-work)
- [Insights](https://blog.e-zest.com/)
- [Healthcare](https://healthcare.e-zest.com/)
- [Accion Labs](https://www.accionlabs.com/)

- <https://www.linkedin.com/company/e-zest-solutions/>
- <https://twitter.com/ezest>
- <https://www.facebook.com/eZest/>
- <https://www.instagram.com/ezestsolutions/>
- <https://www.youtube.com/user/ezestcorporate>

- Dallas
- Detroit
- Hannover
- Vienna
- London
- Pune

 © 2025 e-Zest Solutions

- [Privacy Policy](https://www.e-zest.com/privacypolicy)
- [Cookie Policy](https://www.e-zest.com/cookie-policy)

 Contact us

 Contact us

e-Zest is a leading digital innovation partner for enterprises and technology companies that utilizes emerging technologies for creating engaging customers experiences. Being a customer-focused and technology-driven company, it always helps clients in crafting holistic business value for their software development efforts. It offers software development and consulting services for cloud computing, enterprise mobility, big data and analytics, user experience and digital commerce.