使用CompletionService结合ExecutorService批处理任务
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。如果你向Executor提交了一个批处理任务,并且希望在它
千家信息网最后更新 2025年02月02日使用CompletionService结合ExecutorService批处理任务
CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。
如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果。为此你可以将每个任务的Future保存进一个集合,然后循环这个集合调用Future的get()取出数据。幸运的是CompletionService帮你做了这件事情。
CompletionService整合了Executor和BlockingQueue的功能。你可以将Callable任务提交给它去执行,然后使用类似于队列中的take和poll方法,在结果完整可用时获得这个结果,像一个打包的Future。
CompletionService的take返回的future是哪个先完成就先返回哪一个,而不是根据提交顺序。
例子:
1 import java.util.Random; 2 import java.util.concurrent.Callable; 3 import java.util.concurrent.CompletionService; 4 import java.util.concurrent.ExecutionException; 5 import java.util.concurrent.ExecutorCompletionService; 6 import java.util.concurrent.ExecutorService; 7 import java.util.concurrent.Executors; 8 9 public class CallableAndFuture {10 11 public static void main(String[] args) {12 ExecutorService threadPool = Executors. newFixedThreadPool(10);13 CompletionServicecompletionService = new ExecutorCompletionService (threadPool);14 15 for (int i = 0; i < 10; i++) {16 final int seq = i;17 System. out.println("开始提交第" + seq + "个任务");18 completionService.submit( new Callable () {19 20 @Override21 public Integer call() throws Exception {22 Thread. sleep(new Random().nextInt(5000));23 return seq;24 }25 });26 }27 28 for (int i = 0; i < 10; i++) {29 try {30 // 取出并移除表示下一个已完成任务的 Future,如果目前不存在这样的任务,则等待。31 Integer seq = completionService.take().get();32 System. out.println("第" + seq + "个任务返回");33 } catch (InterruptedException e) {34 e.printStackTrace();35 } catch (ExecutionException e) {36 e.printStackTrace();37 }38 }39 }40 41 }
任务
结果
方法
幸运
为此
事情
例子
功能
对象
成就
数据
队列
顺序
循环
整合
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
考三级网络技术有什么用
python 文件数据库加密
网络安全进入大学教育
2021探岳导航系统数据库
神州数码网络安全比赛
数据库模式浅显理解
网络安全周开幕式河南新华网
2 常用的药学学科数据库是
软件开发周期包括哪几个环节
吉林省网络安全吗
龙图腾小说软件开发
网络技术安全新技术实验报告
软件开发与设计是干嘛呢
庐山软件开发公司
余烬风暴迪丽热巴捏脸数据库
对付网络安全风险的方法
服务器读写速率慢
监控服务器包括哪四个系统
无线传感器网络安全定位方法
手游红警服务器注册满了怎么办
无数据库搜索技术
网络安全有哪些二本院校
以网络安全为主题获奖手抄报
三级网络技术学习软件
linux服务器 维护
幼儿园网络安全检查登记表
系统小说软件开发
网络安全宣传文字材料小学生
买了一台服务器
dell 文件服务器