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>() {
@Override
public 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.util.concurrent.CompletionService;
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>() {
@Override
public 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();
}
}