JAVA多线程—CompletionService的使用介绍

来源:互联网 发布:大表妹是什么网络意思 编辑:程序博客网 时间:2024/06/04 17:58

CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。

好比我同时种了几块地的麦子,然后就等待收割。收割时,则是那块先成熟了,则先去收割哪块麦子。

示例代码:

package syn;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class FutureTest {    public static void main(String[] args) throws Exception {        ExecutorService service = Executors.newFixedThreadPool(3);        CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(service);        for (int i = 0; i < 10; i++) {            final Integer seq = i + 1;            completionService.submit(new Callable<Integer>() {                public Integer call() throws Exception {                    Thread.sleep((long) (Math.random() * 1000));                    return seq;                }            });        }        for (int i = 0; i < 10; i++) {            Future<Integer> f = completionService.take();            System.out.println(f.get());        }        service.shutdown();    }}

运行结果:
这里写图片描述

0 0
原创粉丝点击