Java CountDownLatch

What is CountDownLatch?

A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes, i.e., a kind of synchronization tool that allows one Thread  to wait for one or more Threads before it starts processing.

How does CountDownLatch work?

A CountDownLatch is initialized with a given count. The await methods block until the current count reaches zero due to invocations of the countDown() method, after which all waiting threads are released and any subsequent invocations of await return immediately. This is a one-shot phenomenon — the count cannot be reset. If you need a version that resets the count, consider using a CyclicBarrier.

more information could be found at CountDownLatch in Oracle Document

When should CountDownLatch be used?

A CountDownLatch is a versatile synchronization tool and can be used for a number of purposes. A CountDownLatch initialized with a count of one serves as a simple on/off latch, or gate: all threads invoking await wait at the gate until it is opened by a thread invoking countDown(). A CountDownLatch initialized to N can be used to make one thread wait until N threads have completed some action, or some action has been completed N times.

A useful property of a CountDownLatch is that it doesn’t require that threads calling countDown wait for the count to reach zero before proceeding, it simply prevents any thread from proceeding past an await until all threads could pass.

Classical example of using CountDownLatch in Java  is any server side core Java application which uses services architecture, where multiple services is provided by multiple threads and the application can not start processing  until all services have finished their tasks successfully as shown in the CountDownLatch example here.


Create a model class

Create a class which holds the list of Person object

Create below three different service classes to fetch data from different sources for Person object.

Fetch data from file

Fetch data from database

Fetch data from REST service

Create below class to start different services on separate threads to fetch data and once all data are available then start the main thread

Run the above class, you will get below output

Thanks for reading.

Leave a Reply

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

Time limit is exhausted. Please reload CAPTCHA.