ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
  for (int i = 0; i < 10; i++) {
    final int index = i;
  try {
    Thread.sleep(index * 1000);
   } catch (InterruptedException e) {
      e.printStackTrace();
  }
   cachedThreadPool.execute(new Runnable() {
     @Override
     public void run() {
        log.info(index);
      }
   });
}