Java多线程学习(十)CompletionService学习

CompletionService整合了Executor和BlockingQueue的功能。可以将多个Future任务添加到BlockingQueue的队列中,然后获取是可以调用take(阻塞)或poll(非阻塞)方法从队列中获取任务的执行结果。

添加到队列中的任务时按照执行完成时间的顺序添加进去的,先完成的任务先添加到队列中,所以从队列中获取任务结果也一定是先获取到最先计算完成的。

 

ExecutorCompletionService是CompletionService接口的实现类,它有三个成员变量:

1.executor:执行task的线程池,创建CompletionService必须指定;

2.aes:主要用于创建待执行task;

3.completionQueue:存储已完成状态的task,默认是基于链表结构的阻塞队列LinkedBlockingQueue。

 

引用:CompletionService的实现是维护一个保存Future对象的BlockingQueue。只有当这个Future对象状态是结束的时候,才会加入到这个Queue中,take()方法其实就是Producer-Consumer中的Consumer。它会从Queue中取出Future对象,如果Queue是空的,就会阻塞在那里,直到有完成的Future对象加入到Queue中。所以,先完成的必定先被取出。这样就减少了不必要的等待时间

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值