JDK5 如何获取所有线程池的结果再继续执行
来源:互联网 发布:淘宝上兰可欣那么便宜 编辑:程序博客网 时间:2024/06/06 01:28
JDK5的Callable和Future组合使用可以获取单个线程的执行的结果。那如何获取多个线程的执行结果呢?
别急,CompletionService的存在,让这一切变的那么简单。
首先CompletionService需要一个Executor线程池为参数构造一个新对象,如
ExecutorService objExecutorService = Executors.newFixedThreadPool(3);
CompletionService<String> objCompletionService = new ExecutorCompletionService<String>(objExecutorService);
泛型既返回的参数类型。
然后使用CompletionService.submit(Callable)接受需要执行的任务。
如:
for(int i= 0;i<10;i++){final int iResult = i;objCompletionService.submit(new Callable<String>() {public String call() throws Exception {Thread.sleep(new Random().nextInt(10*1000));return "第"+iResult+"线程执行返回结果";}});}
最后使用CompletionService.take().get()获取结果,如
for (int i = 0; i < 10; i++) {try {System.out.println(objCompletionService.take().get());} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ExecutionException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
ok!
完整代码为:
ExecutorService objExecutorService = Executors.newFixedThreadPool(3);
CompletionService<String> objCompletionService = new ExecutorCompletionService<String>(
objExecutorService);
for(int i= 0;i<10;i++){
final int iResult = i;
objCompletionService.submit(new Callable<String>() {
public String call() throws Exception {
Thread.sleep(new Random().nextInt(10*1000));
return "第"+iResult+"线程执行返回结果";
}
});
}
for (int i = 0; i < 10; i++) {
try {
System.out.println(objCompletionService.take().get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("继续往下执行");
执行结果为:
从执行结果可以看出,会产生阻塞等待所有线程执行完成再继续。
- JDK5 如何获取所有线程池的结果再继续执行
- JDK5 获取线程返回结果
- 多线程中主线程等待所有子线程执行完再继续执行的解决方法
- 获取线程执行结果
- JDK5中的Callable与Future的应用:获取一个线程的运行结果
- CountDownLatch实现主线程等待所有子线程运行结束后再继续执行的实现
- 主线程等待所有子线程执行完毕后再继续的问题
- 【多线程】——Runnable如何获取线程执行结果?
- Java回调以及如何利用回调来获取线程的执行结果
- 如何在java中获取线程异步执行之后的结果
- 线程池利用FutureTask执行Callable子类,获取执行结果的例子
- jdk5以上自带线程池使用并返回结果
- 如何得到线程执行完之后返回的结果
- Java并发:等待事件发生后所有线程继续执行
- Android - 线程同步 android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行
- 转载:C程序中如何获取命令执行的结果
- 多个子线程并发执行,主线程等待所有子线程都结束后再继续运行
- Java如何判断线程池所有任务是否执行完毕
- sort
- 向量空间_part1
- Silverlight中的ControlTemplate与 TemplateBinding
- 如何完成Apache虚拟主机设置?
- (1)objective c 入门之NSAutoreleasePool
- JDK5 如何获取所有线程池的结果再继续执行
- SDUT-1500-(字典树)
- [转]Windows 8 Metro app开发初体验
- hdu-1075-What Are You Talking About-(字典树)
- 2012年815光复日
- [热身题][hdoj_2036]改(和谐)革春风吹满地(补发8月6日中午)
- Four aspects of making a Great consumer Operating System
- poj 3522 Slim Span
- 《Effective C++》读书笔记之item26:尽可能延后变量定义式的出现时间