import java.util.ArrayList; import java.util.concurrent.CountDownLatch; public class SleepSort { private static volatile ArrayList sorted = new ArrayList(); /** * @param args */ public static void main(String[] args) { CountDownLatch latch = new CountDownLatch(args.length); for(String string : args){ Integer num = Integer.parseInt(string); new AddToListRunnable(num, latch).start(); } try { latch.await(); System.out.println(sorted); } catch (InterruptedException e) { e.printStackTrace(); } } private static class AddToListRunnable extends Thread { private final Integer number; private final CountDownLatch latch; public AddToListRunnable(Integer number, CountDownLatch latch){ this.number = number; this.latch = latch; } @Override public void run() { try { sleep(number * 1000l); sorted.add(number); latch.countDown(); System.out.println(latch.getCount()); } catch (InterruptedException e) { e.printStackTrace(); } } } }