码迷,mamicode.com
首页 > 其他好文 > 详细

ExecutorCompletionService的使用方法

时间:2016-05-19 16:30:01      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

import java.util.ArrayList;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class Test {

    static class Call implements Callable<String> {
        String name;
        public Call(String name) {
            this.name = name;
        }
        @Override
        public String call() throws Exception {
            if (name.equals("5"))
                Thread.sleep(5000);
            Thread.sleep(1000);
            System.out.println(name + "over");
            return name;
        }
    }

    public static void main(String[] args) throws Exception {
        ExecutorCompletionService<String> pool = new ExecutorCompletionService<String>(
                Executors.newFixedThreadPool(5));
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 10; i++)
            pool.submit(new Call(i + ""));
        for (int i = 0; i < 10; i++) {
            Future<String> f = pool.poll(2000, TimeUnit.MILLISECONDS);//poll函数无参数则不等待,有完成结果则返回结果,无完成结果则返回null
            if (null != f) {
                String res = f.get();
                list.add(res);
            } else
                System.out.println(i + "null");
        }
        for (int i = 0; i < list.size(); i++)
            System.out.println(list.get(i));

    }

}

执行结果:

2over
1over
3over
0over
4over
6over
7over
8over
9over
9null
2
1
3
0
4
6
7
8
9
5over

ExecutorCompletionService的使用方法

标签:

原文地址:http://www.cnblogs.com/yolotproc/p/5509067.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!