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

[![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-vi/#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 VI

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

[Executor Framework](https://blog.e-zest.com/topic/executor-framework) [Java](https://blog.e-zest.com/topic/java) [ExecutorService](https://blog.e-zest.com/topic/executorservice) [Multithreading](https://blog.e-zest.com/topic/multithreading) [RejectedExecutionHandler](https://blog.e-zest.com/topic/rejectedexecutionhandler) [Concurrency API](https://blog.e-zest.com/topic/concurrency-api) [ThreadPoolExecutor](https://blog.e-zest.com/topic/threadpoolexecutor) [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-vi/&title=&summary=&source=>
- <https://twitter.com/intent/tweet?source=https://blog.e-zest.com/the-executor-framework-part-vi/&text=The%20Executor%20Framework%20–%20Part%20VI>
- <https://www.facebook.com/sharer/sharer.php?u=https://blog.e-zest.com/the-executor-framework-part-vi/>
- <https://www.instagram.com/ezestsolutions/?u=https://blog.e-zest.com/the-executor-framework-part-vi/>

In the last post of the [Executor Framework](https://blog.e-zest.com/blog/the-executor-framework-part-v/) blog post series, I had written about executing a single task from a collection of tasks, creating a Callable task from a Runnable task, cached Thread Pool and [`ThreadPoolExecutor`](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html).

`ThreadPoolExecutor` class implements [`ExecutorService`](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html) interface.

In this blog post, I’m writing about the following topics related to `ThreadPoolExecutor`:

- Changing `RejectedExecutionHandler` policy
- Executing a `Runnable` task
- Obtaining thread statistics
- Obtaining task statistics
- Defining work to be done before and after execution of each task
- Monitoring the underlying task queue
- Removing tasks from task queue

**Changing RejectedExecutionHandler policy**

When a bounded queue is used by `ThreadPoolExecutor` to hold the tasks submitted for execution and the queue is full, the following four `RejectedExecutionHandler` policies decide what happens to the tasks that are added to the queue after it becomes full:

- `ThreadPoolExecutor.AbortPolicy` – This is the default policy. When the queue is full all tasks added to the queue are rejected and `RejectedExecutionException` is thrown.
- `ThreadPoolExecutor.CallerRunsPolicy` – If this policy is applied the thread which called the `execute()` method of `ThreadPoolExecutor`, is used to run the task.
- `ThreadPoolExecutor.DiscardPolicy` – The task is discarded without throwing any exception.
- `ThreadPoolExecutor.DiscardOldestPolicy` – The task at the head of queue is removed from the queue.

The `RejectedExecutionHandler` can be changed by calling the `setRejectedExecutionHandler(RejectedExecutionHandler handler)` method of `ThreadPoolExecutor`.

**Executing a Runnable task**

The `execute(Runnable command)` method of `ThreadPoolExecutor` submits a Runnable task for execution. The method may execute it immediately or in future. The task may be executed by a new thread or an existing thread from the pool depending on the `ThreadPoolExecutor` configuration. If the task submitted for execution is rejected, then the configured `RejectedExecutionHandler` decides how the rejected task should be handled.

**Obtaining thread statistics**

The following methods of `ThreadPoolExecutor` enable obtaining thread statistics:

- `getActiveCount()` - returns the number of threads actively executing tasks.
- `getCorePoolSize()` – returns the count of core threads in the pool
- `getLargestPoolSize()` – returns the maximum count of threads that concurrently existed in the pool
- `getMaxiumPoolSize()` – return the maximum number of threads that can run concurrently in the pool.
- `getPoolSize()` – returns the current count of threads in the pool

**Obtaining task statistics**

The following methods of `ThreadPoolExecutor` enable obtaining task statistics:

- `getCompletedTaskCount()` – returns the count of tasks that are completed
- `getTaskCount()` – returns the count of tasks that have ever been scheduled for execution

**Defining work to be done before and after execution of each task**

The `beforeExecute(Thread, Runnable)` method can be overridden to define the work that should be done before running each task. The work is defined as `Runnable` task which is the second argument and the thread which should perform it is passed as the first argument to this method.

The `afterExecute(Runnable, Throwable)` can be overridden to define the work that should be done after the task is executed. It is defined as Runnable task. If the task is terminated and an exception is thrown, it will be represented by the second argument. If the task completes normally then the second argument is null.

The `terminated()` method allows defining work that should be done after the `ThreadPoolExecutor` is terminated.

**Monitoring the underlying task queue**

The underlying task queue used by `ThreadPoolExecutor` can be accessed by `getQueue()` method. Direct usage of the queue except for monitoring purpose is discouraged.

**Removing tasks from the task queue**

The `remove(Runnable task)` method of `ThreadPoolExecutor` can be called to remove a task from the task queue. If the task is found in the task queue and it is not already running then it is removed from the task queue. This method returns true if the task is removed.

The `purge()` method of `ThreadPoolExecutor` tries to remove the cancelled `Future` tasks from the task queue. Cancelled tasks may be retained in the task queue until a worker thread removes them. This method helps to reclaim storage memory by trying to remove the cancelled tasks.

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

### Similar Blog

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