package com.qd.thread.callable; import java.util.concurrent.Callable; /** * Created by chenlongbo on 2017/4/24. */ public class TaskWithResult implements Callable<String>{ private int id; public TaskWithResult(int id){ this.id = id; } public String call() throws Exception { return " result of TaskWithResult : "+id; } }
package com.qd.thread.callable; import java.util.ArrayList; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * Created by chenlongbo on 2017/4/24. */ public class CallableDemo { public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); ArrayList<Future<String>> futures = new ArrayList<Future<String>>(); for (int i = 0; i < 10; i++) { futures.add(exec.submit(new TaskWithResult(i))); } for(Future<String> fs:futures){ try { System.out.println(fs.get()); } catch (InterruptedException e) { System.out.println(e); e.printStackTrace(); return; } catch (ExecutionException e) { System.out.println(e); e.printStackTrace(); }finally { exec.shutdown(); } } } }