Category Archives: Java

Ejemplo de CountDownLatch

Published / by Renan Huanca / Leave a Comment

Hola Amigos, esta semana tengo un simple ejemplo de uso de la clase CountDownLatch.

Esta clase simplemente nos ayuda a sincronizar operaciones dentro de varios threads que necesiten ejecutarse en un momento dado.

El siguiente ejemplo muestra la creación de 50 threads. Como verán, dentro del método run() hay una porción de código que llama a la funcion await(). Esto ayuda a que cada thread no ejecute el siguiente segmento de código hasta que la señal del CountDownLatch sea lanzado.

El código fuente lo pueden encontrar en acá.
Mas información la pueden encontrar en:

import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {
	
	public static void main(String... args) {
		// Instantiating countdownlatch class.
		CountDownLatch countDown = new CountDownLatch(1);
		System.out.println("Creating threads...");
		
		// going to create 50 threads.
		for(int i=0;i<50;i++) {
			Worker worker = new Worker(countDown, "Worker #"+i);
			new Thread(worker).start();
		}
		
		// Now start all threads at the same time.
		countDown.countDown();
		
	}
	
	/**
	 * This class is just a simple dummy thread.
	 */
	private static class  Worker implements Runnable {
		CountDownLatch startLatch;
		String name;
		
		public Worker(CountDownLatch startLatch, String name) {
			super();
			this.startLatch = startLatch;
			this.name = name;
		}

		public void run() {
			try {
				// Going to wait until the signal is being fired.
				this.startLatch.await();
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			}
			System.out.println("Running " + name+".");
		}
	}
}