Java ExecutorCompletionService

Java ExecutorCompletionService

In this post, we will see about Java ExecutorCompletionService example.

ExecutorCompletionService class implements CompletionService. This class returns Future object in completion order.

Why you may need to use ExecutorCompletionService:

Let’s understand with the help of scenario:

Let’s say you have 5 tasks, you submit it to the executors and you want to perform some operation as soon as task completes.Let’s also assume that the first task takes the longest time.
If you use Executors in this case, when you call future.get() on the first task, get operation will be blocked and even though other tasks may have completed, you won’t be able to proceed further.

To solve this issue, you can use ExecutorCompletionService. ExecutorCompletionService returns futures objects based on completion order, so whichever task executes first, will be returned first. You just need to call executorCompletionService.take() to get completed Future object.

Java ExecutorCompletionService example:

Let’s create a very simple example.

Step 1: Create a Callable task named "MultiplyingTask.java".

Step 2: Create a class named "FutureTaskMain". This will be our main class.

Let’s run above program to check the output:

Started taskName: Task 1
Started taskName: Task 3
Started taskName: Task 2
Started taskName: Task 4
Completed taskName: Task 4
Result: 3000
Completed taskName: Task 1
Result: 200
Completed taskName: Task 3
Result: 2000
Completed taskName: Task 2
Result: 1200

As you can see with the output, All four tasks started simuntaneously but We retrieved the results based on the completion order with the help of executorCompletionService.take().get() rather than calling get() method on future object.
That’s all about Java ExecutorCompletionService example.

Was this post helpful?

Leave a Reply

Your email address will not be published. Required fields are marked *