Sincronizzare piu task con CountDownLatch in Java

Si ha bisogno piu volte di mettere in esecuzione piu task(jobs), e quindi ci viene in aiuto il CountDownLatch.
Tramite esso viene inizializzata una variabile di conteggio e ogni volta che un task viene completato viene fatto diminuire il numero. Al termine dei lavori semplicemente il programma termina con un ‘Println’.
Ecco il codice esempio di progetto:

Main.java

import java.util.concurrent.CountDownLatch;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CountDownLatch cdl = new CountDownLatch(1);
		new ParallelExe(cdl);
		
		try {
			cdl.await();
		} catch (InterruptedException exc) {
			System.out.println(exc);
		}
		System.out.println("Terminated");
	}

}

ParallelExe.java

import java.util.concurrent.CountDownLatch;

public class ParallelExe implements Runnable{
	CountDownLatch latch;
	
	public ParallelExe(CountDownLatch cdl) {
		// TODO Auto-generated constructor stub
		latch = cdl;
		this.run();
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.print("RUN");
		latch.countDown();
	}
	
}

Links
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html