import java.util.concurrent.*; class Fibonacci2 implements Callable<Integer> { public static ExecutorService threadPool = Executors.newCachedThreadPool(); int n; public Fibonacci2(int n) { this.n = n; } public Integer call() { try { if ((n == 0)||(n == 1 )) return 1; else { Future<Integer> f1 = threadPool.submit(new Fibonacci2(n-1)); Future<Integer> f2 = threadPool.submit(new Fibonacci2(n-2)); return f1.get() + f2.get(); } } catch (Exception e) { System.err.println (e); return 1;} } public static void main(String[] args) { try { ExecutorService es = Executors.newSingleThreadExecutor(); Fibonacci2 f = new Fibonacci2(Integer.parseInt(args[0])); Future<Integer> f1 = es.submit(f); System.out.println("Answer is " + f1.get()); es.shutdown (); f.threadPool.shutdown(); } catch (Exception e) { System.err.println (e); } } }