import java.util.ArrayList;
import java.util.concurrent.CountDownLatch;
public class SleepSort {
private static volatile ArrayList<Integer> sorted = new ArrayList<Integer>();
/**
* @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();
}
}
}
}