CountDownLatch: await()
import java.util.concurrent.CountDownLatch; public class Main { public static void main(String args[]) { CountDownLatch cdl = new CountDownLatch(5); new MyThread(cdl); try { cdl.await(); } catch (InterruptedException exc) { System.out.println(exc); } System.out.println("Done"); } } class MyThread implements Runnable { CountDownLatch latch; MyThread(CountDownLatch c) { latch = c; new Thread(this).start(); } public void run() { for(int i = 0; i<5; i++) { System.out.println(i); latch.countDown(); // decrement count } } }