import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class ExecutorTest5 { public ExecutorTest5() { ExecutorService e = Executors.newSingleThreadExecutor(); List> tasks = new ArrayList>(); for (int i = 0; i < 5; i++) { Callable task = new CallableTask("task" + i); tasks.add(task); } try { List> futures = e.invokeAll(tasks); for (Future future: futures) { try { System.out.println("Future#get(): " + future.get()); } catch (ExecutionException ex) { ex.printStackTrace(); } } } catch (InterruptedException ex) { ex.printStackTrace(); } e.shutdown(); } class CallableTask implements Callable { private String name; public CallableTask(String name) { this.name = name; } public String call() { System.out.println(name + " is Called."); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException ex) {} System.out.println(name + " exits."); return name; } } public static void main(String[] args) { new ExecutorTest5(); } }