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

[![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-i/#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 I

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

[Executor](https://blog.e-zest.com/topic/executor) [Executors.newSingleThreadExecutor](https://blog.e-zest.com/topic/executors-newsinglethreadexecutor) [Runnable](https://blog.e-zest.com/topic/runnable) [Java](https://blog.e-zest.com/topic/java) [ExecutorService](https://blog.e-zest.com/topic/executorservice) [Thread](https://blog.e-zest.com/topic/thread) [fixed size thread pool](https://blog.e-zest.com/topic/fixed-size-thread-pool) [single thread executor](https://blog.e-zest.com/topic/single-thread-executor) [Multithreading](https://blog.e-zest.com/topic/multithreading) [Concurrency API](https://blog.e-zest.com/topic/concurrency-api) [Executors.newFixedSizeThreadPool](https://blog.e-zest.com/topic/executors-newfixedsizethreadpool) [Executors](https://blog.e-zest.com/topic/executors) [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-i/&title=&summary=&source=>
- <https://twitter.com/intent/tweet?source=https://blog.e-zest.com/the-executor-framework-part-i/&text=The%20Executor%20Framework%20–%20Part%20I>
- <https://www.facebook.com/sharer/sharer.php?u=https://blog.e-zest.com/the-executor-framework-part-i/>
- <https://www.instagram.com/ezestsolutions/?u=https://blog.e-zest.com/the-executor-framework-part-i/>

Multithreading is one of the important features of Java programming language. A thread runs a task and thus multiple threads enable execution of multiple tasks concurrently in a Java application. Prior to Java 5, [`Thread`](http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html) class was instantiated explicitly to create a thread. The thread pool implementation also was not provided by the API.

With the Concurrency API introduced in Java 5, there is no more need to explicitly instantiate `Thread` class to create a thread. The Executor framework included in the Concurrency API provides many facilities for multithreaded programming such as creating threads, creating various types of thread pools, submitting tasks to a thread pool, performing asynchronous execution of tasks etc.

It is recommended to use the Executor framework instead of using the Thread class directly in the code. The Executor framework allows decoupling of the code to create thread pool and threads and the code for tasks which the threads should execute. The former part is now taken care by the Concurrency API.

In one of my previous blog posts on [Active Object Pattern](https://blog.e-zest.com/blog/active-object-pattern/), I had written about how we had used it to read the messages from the message queue (MQ) and parse them. We had used `Executors` to create a thread pool. A thread from the pool parsed a message and thus messages were parsed concurrently. The use of Executor framework saved the effort of writing code to create threads and managing a thread pool.

I’ll be writing about the Executor framework in a series of blog posts. In this blog post I have explained the following uses of the framework:

1. Creating a single worker thread for sequential execution of tasks.
2. Creating a thread pool of fixed number of threads.

The Concurrency API provides [`Executor`](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executor.html), [`ExecutorService`](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html) and `ScheduledExecutorService` interfaces. An instance of class implementing `Executor` is used to submit a `Runnable` task for execution instead of explicitly creating threads with `Thread` class. The `ExecutorService` is a subinterface of `Executor`.

`ExecutorService` allows submission of `Callable` tasks for asynchronous execution and creating cancellable Runnable tasks. `Callable` is an interface like `Runnable` and it is part of Concurrency API. The factory class - [`Executors`](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html) of Concurrency API is generally used to obtain the implementation of `ExecutorService` and submit the `Runnable` or `Callable` tasks for execution.

**Executing tasks sequentially with a single thread**

The `Executors.newSingleThreadExecutor()` method returns an `ExecutorService` which uses a single worker thread to execute the `Runnable` or `Callable` tasks. An unbounded queue is used to held the tasks submitted to it which means that there is no upper limit on the number of tasks submitted for execution. The tasks are executed sequentially in the order of submission. Since only one thread is running them only one task will be running at a time. One advantage of using this factory method is that if the thread terminates due to an exception during execution of a task before shutdown of the `ExecutorService`, a new thread will be created and it will resume execution of the subsequent tasks.

The use of `Executors.newSingleThreadExecutor()` is given below in Listing 2. To illustrate the use of this method, I have used a simple Runnable task given in Listing 1. which prints Hello.

```

public class PrintHello implements Runnable {
    public void run() {
        System.out.println(“Hello”);
    }
}
```

Listing 1. A simple Runnable task to print Hello

 

```

ExecutorService service = Executors.newSingleThreadExecutor();
PrintHello task = new PrintHello();
//print Hello twice
service.execute(task);
service.execute(task);
service.shutdown();
```

Listing 2. Using the `Executors.newSingleThreadExecutor()` to run the task

**Shutting down ExecutorService**

The `shutdown()` method of `ExecutorService` should be explicitly called to stop it. It shuts down the `ExecutorService` after all the submitted tasks are executed. This method does not throw any exception if the `ExecutorService` has already stopped. The `isShutdown()` method of `ExecutorService` can be called to check whether it is stopped.

The `shutdownNow()` method of `ExecutorService` attempts to shutdown by stopping all active tasks in execution and cancelling all the waiting tasks. The list of `Runnable` tasks that were waiting for execution is returned by this method. This method does not guarantee stopping of active tasks. The active tasks are stopped by thread interrupt. If a thread is not interrupted the task may not stop.

**Creating a thread pool with fixed number of threads**

The `Executors.newFixedSizeThreadPool(int n)` creates a thread pool of n number of threads and returns an `ExecutorService`. This thread pool uses an unbounded queue which means that any number of tasks can be submitted to it for execution. This method may create all the threads at once or may create them as they are required. At max n number of threads will be active at any point during its execution. If more number of tasks are submitted than the number of active threads, then the remaining tasks will be held in the queue. As soon as a thread completes execution of a task, it can take over the execution of the waiting task from the queue.

For performance tuning, the number of threads to be created by the thread pool is usually defined in a properties file.

Listing 3 given below illustrates the creation of a thread pool and submitting tasks to it for execution.

```

//Read this value from a properties file
int thread_count = 2;
ExecutorService service =
        Executors.newFixedSizeThreadPool(thread_count);
PrintHello task = new PrintHello();
//print Hello 10 times
for(int i=1; i <=10; i++)
    service.execute(task);
}
service.shutdown();
```

Listing 3. Creating a thread pool of multiple threads and submitting the task for execution

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

### Similar Blog

<https://blog.e-zest.com/the-executor-framework-part-vii/>

[The Executor Framework – Part VII](https://blog.e-zest.com/the-executor-framework-part-vii/)

[In the last blog post on](https://blog.e-zest.com/the-executor-framework-part-vii/)[Executor Framework](https://blog.e-zest.com/blog/the-executor-framework-part-vi/), I had written about [ThreadPoolExecutor](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html). In this blog post, I’m writing about [...](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html)

By Madhura Oak Oct 07, 2013

[The Executor Framework – Part V So far in the Executor Framework blog post series, I have covered the following topics: By Madhura Oak Apr 02, 2013](https://blog.e-zest.com/the-executor-framework-part-v/)

<https://blog.e-zest.com/the-executor-framework-part-ii/>

[The Executor Framework – Part II](https://blog.e-zest.com/the-executor-framework-part-ii/)

[In the Part I of](https://blog.e-zest.com/the-executor-framework-part-ii/)[Executor Framework](https://blog.e-zest.com/blog/the-executor-framework-part-i/) blog post series, I had written how it can be used to create a single worker thread for ...

By Madhura Oak Feb 18, 2013

[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.