package advanced.java; import java.util.Random; import java.util.concurrent.*; /** * callable和future是试验类 * * @author: cuiH * Date: 13-11-27 * 执行一个线程,取得线程返回的结果 * callable 返回一个结果,future取到返回的结果。 */ public class CallableAndFuture { public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException { ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<String> future = threadPool.submit(new Callable<String>() { @Override public String call() throws Exception { Thread.sleep(200); return "Hello Honey"; } });//提交返回的结果 System.out.println("等待结果"); System.out.println("拿到结果:" + future.get(1, TimeUnit.SECONDS)); //future能够添加参数,此处超过一秒没有取到,我就不取了 ExecutorService threadPool2 = Executors.newFixedThreadPool(10); //提交一批量的结果,而后,马上得到先得到的结果,同时捕获。应用须要查找 CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool2); for (int i = 0; i < 10; i++) { final int finalI = i; completionService.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { Thread.sleep(new Random().nextInt(5000)); return finalI; } }); } for (int i = 0; i < 10; i++) { System.out.println(completionService.take().get()); } } }