package com.entel.research; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CallableAndFuture { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(5); CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>( threadPool); for (int i = 1; i <= 5; i++) { final int seq = i; completionService.submit(new Callable<Integer>() { public Integer call() throws Exception { Thread.sleep(new Random().nextInt(1000)); return seq; } }); } for (int i = 0; i < 5; i++) { try { System.out.println(completionService.take().get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } threadPool.shutdown(); System.out.println("The End"); } }