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_1 { public ExecutorTest5_1() { 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 { String result = e.invokeAny(tasks); System.out.println("Result: " + result); } 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_1(); } }