CompletionService批量执行异步任务&询价系统

2020-06-05 19:55

当需要批量提交异步任务时,建议使用CompletionService,它集成了Executor和BlockingQueue的功能,使批量异步任务的管理更简单,执行结果更有序,在第一次执行后先进入阻塞队列,并隔离线程池,以避免线程饥饿。

工具/原材料的实现原则1 completionServiceExecutorCompletionServiceCompletionServiCe 1 completionServiCe的实现原则在内部维护一个阻塞队列。

1)当任务执行完成时,将任务执行结果的Future对象添加到阻塞队列中;

2)通过CompletionService提供的take()方法获取未来对象;

3)调用Future的get()方法返回执行结果。

ENDExecutorCompletionService简介1ExecutorCompletionService有两个构造函数:

CompletionService批量执行异步任务&询价系统步骤阅读2提交任务完成服务使用方法提交

-2步骤读取3获得执行结果,这些结果都与阻塞队列有关。

-3步读取结束示例1:查询功能1关键代码:图

-4步读取2源代码:

导入java.util.ArrayList。

导入Java . util . list;

导入Java . util . concurrent . *;

公共类CompletionServiceDemo {

公共静态空主(字符串步骤读取3源代码:

导入java.util.ArrayList。

导入Java . util . list;

导入Java . util . concurrent . *;

公共类CompletionServiceDemo {

公共静态void main(字符串[)参数引发中断异常,ExecutionException {

//创建线程池

ExecutorService线程池= Executors . NewFixedThreadPool(2);

//创建完成服务

完成服务=新的执行完成服务(线程池);

//保存执行结果的未来对象

列表& lt未来<。整数> 0。>。futures =新数组列表& lt>。();

//提交任务

futures . add(service . submit)(()->。getprice 1());

futures . add(service . submit)(()->。getprice 2());

//获得最快的返回任务执行结果

整数结果= 0;

尝试{

对于(int I = 0;i <。futures . size();i++) {

结果=(整数)服务。取()。get();

如果(结果!= null) {

休息;

}

}

}终于{

//取消所有任务

未来整数> 0。未来:未来)

未来。取消(真);

}

}

系统输出打印输入(结果);//只返回价格2

}

公共静态int getPrice1() {

尝试{

线程睡眠(200);

}捕获(中断例外e) {

e . PrintStackTrace();

}

返回1;

}

公共静态int getPrice2() {

尝试{

线程睡眠(100);

}捕获(中断例外e) {

e . PrintStackTrace();

}

返回2;

}

}

目标

联系我们

天津市西青区中北镇云锦世家南门55号
4007181001
30998@qq.com

庆典活动

商务会议

企业年会

展会展览