使用CompletionService结合ExecutorService批处理任务
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。如果你向Executor提交了一个批处理任务,并且希望在它
千家信息网最后更新 2025年12月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 CompletionService completionService = 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安全错误
数据库的锁怎样保障安全
怎样联系网络技术人员
浪潮服务器水冷接口
中国电信网络技术二面会提问什么
数据分析软件开发流程
南京中国移动软件开发
网络技术专业职业学院排行
企业复工怎么做网络安全保护
昆山订货软件开发
pcl2皮肤服务器不显示
服务器 清洁
ibm服务器双机热备
2016服务器安全日志
网络安全校级团日活动背景
软件开发是先做前端还是后端
普华永道做网络安全
丰台戴尔服务器回收价格查询
外文数据库供应商排名
hp 服务器 800电话
投道科技专业软件开发
海虹医保服务器
高斯数据库字符串转日期类型
ppt引用数据库怎么弄
软件开发毕设开题报告
卧龙吟手游选服务器
sql连接数据库出现问题
hpc7000服务器面板没显示
网络安全的公司
网络技术科普
南京机电软件开发技术参数
成都滨飞扬网络技术有限公司