package com.interview.basics.java.cocurrency; import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 11/3/14 * Time: 1:15 PM */ public class MultiThreadUsingCallable { static class LiftOff implements Callable<String>{ protected int countDown = 10; private static int taskCount = 0; private final int id = taskCount++; public LiftOff() { } public LiftOff(int countDown) { this.countDown = countDown; } @Override public String call() { return "#" + id + "(" + (countDown > 0? countDown : "Liftoff!") + "), "; } } public static void main(String[] args){ // for(int i = 0; i < 5; i++){ // new Thread(new LiftOff()).start(); // } //ExecutorService exec = Executors.newCachedThreadPool(); ExecutorService exec = Executors.newFixedThreadPool(3); List<Future<String>> results = new ArrayList<Future<String>>(); for(int i = 0; i < 5; i++){ results.add(exec.submit(new LiftOff())); } System.out.println("Waiting for Liftoff!"); for(Future<String> fs : results){ try { System.out.println(fs.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } finally{ exec.shutdown(); } } exec.shutdown(); } }