Friday, September 18, 2015

Java Concurrency Model - Part II - CountDownLatch

Note: Get the source code from

In this post i have tried to show an example using CountDownlatch, a synchronizer in Java concurrency framework.

Class CountDownLatchTest


import java.util.concurrent.CountDownLatch;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CountDownLatchTest {

    public static void main(String args[]) {
       final CountDownLatch latch = new CountDownLatch(3);
       Thread service1 = new Thread(new Service("Service1", 1000, latch));
       Thread service2 = new Thread(new Service("Service2", 1000, latch));
       Thread service3 = new Thread(new Service("Service3", 1000, latch));
       // application should not start processing any thread until all service is up
       // and ready to do there job.
       // Countdown latch is idle choice here, main thread will start with count 3
       // and wait until count reaches zero. each thread once up and read will do
       // a count down. this will ensure that main thread is not started processing
       // until all services is up.
       //count is 3 since we have 3 Threads (Services)
            latch.await();  //main thread is waiting on CountDownLatch to finish
            System.out.println("All services are up, Application is starting now");
       }catch(InterruptedException ie){

 * Service class which will be executed by Thread using CountDownLatch synchronizer.
class Service implements Runnable{
    private final String name;
    private final int timeToStart;
    private final CountDownLatch latch;
    public Service(String name, int timeToStart, CountDownLatch latch){ = name;
        this.timeToStart = timeToStart;
        this.latch = latch;
    public void run() {
        try {
        } catch (InterruptedException ex) {
            Logger.getLogger(Service.class.getName()).log(Level.SEVERE, null, ex);
        System.out.println( name + " is Up");
        latch.countDown(); //reduce count of CountDownLatch by 1

No comments: