Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,
并获取计算的结果。 计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可
以阻塞此方法。
package jingtianxiaozhi;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;/** 线程池续* Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。* 计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法*/public class TestCallableFuture {public static void main(String[] args) {ExecutorService threadPool=Executors.newSingleThreadExecutor();Future<String>future = threadPool.submit(new Callable<String>() {@Overridepublic String call() throws Exception {return "Callable Future";}});try {System.out.println("hello "+future.get());} catch(Exception e) {}threadPool.shutdown();}}
CompletionService(农场收菜)
CompletionService就是 ExecutorService的子类的一个装饰设计类。
将生产新的异步任务与使用已完成任务的结果分离开来的服务。
生产者 submit 执行的任务。使用者 take 已完成的任务,并按照完成这些任务的顺序处
理它们的结果。
package jingtianxiaozhi;import java.util.Random;import java.util.concurrent.Callable;import java.pletionService;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** CompletionService就是* ExecutorService的子类的一个装饰设计类。* 将生产新的异步任务与使用已完成任务的结果分离开来的服务。* 生产者 submit 执行的任务。使用者 take 已完成的任务,并按照完成这些任务的顺序处理它们的结果。*/public class TestCompletionService {public static void main(String[] args) {ExecutorService threadPool=Executors.newFixedThreadPool(3);CompletionService<Integer>completionService=new ExecutorCompletionService<Integer>(threadPool);for(int i=0;i<10;i++){final int task=i;completionService.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {Thread.sleep(new Random().nextInt(10000));return task;}});}for(int i=0;i<10;i++){try {System.out.println(completionService.take().get());} catch (Exception e) {}}threadPool.shutdown();}}