import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * 如果你想在任务返回后带一个返回值,可以实现Callable接口<br> * executorService.submit返回带结果的future对象[执行了call方法后返回]<br> * 调用get会一直阻塞直到结果返回 * * @date:2018年6月26日 * @author:zhangfs * * */ public class CallableDemo implements Callable<String> { private int id; public CallableDemo(int id) { this.id = id; } public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); List<Future<String>> results = new ArrayList<Future<String>>(); for (int i = 0; i < 10; i++) { results.add(executorService.submit(new CallableDemo(i))); } for (Future<String> future : results) { try { System.out.println(future.get()); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { executorService.shutdown(); } } } @Override public String call() throws Exception { // TODO Auto-generated method stub return "Result of CallableDemo is " + id; } }