CallableExample.java package com.howtodoinjava.demo.multithreading; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class CallableExample { public static void main(String[] args) { ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(2); List<Future<Integer>> resultList = new ArrayList<>(); Random random = new Random(); for (int i=0; i<4; i++) { Integer number = random.nextInt(10); FactorialCalculator calculator = new FactorialCalculator(number); Future<Integer> result = executor.submit(calculator); resultList.add(result); } for(Future<Integer> future : resultList) { try { System.out.println("Future result is - " + " - " + future.get() + "; And Task done is " + future.isDone()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } //shut down the executor service now executor.shutdown(); } }
程序输出。
1 2 3 4 5 6 7 8
Result for number - 4 -> 24 Result for number - 6 -> 720 Future result is - - 720; And Task done is true Future result is - - 24; And Task done is true Result for number - 2 -> 2 Result for number - 6 -> 720 Future result is - - 720; And Task done is true Future result is - - 2; And Task done is true