欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

得到线程执行完之后返回的结果,线程执行完返回,package cn.i

来源: javaer 分享于  点击 49205 次 点评:168

得到线程执行完之后返回的结果,线程执行完返回,package cn.i


package cn.itcast.gz;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 CallableAndFuture {    public static void main(String[] args) {        ExecutorService threadPool = Executors.newSingleThreadExecutor();        // future用于得到任务执行完之后的返回 值        Future<Person> future = threadPool.submit(new Callable<Person>() {            /**             * 回调方法             */            @Override            public Person call() throws Exception {                Person p = new Person("小小", 22);                return p;            }        });        try {            // 得到线程结束后返回的结果            System.out.println(future.get());        } catch (Exception e) {            e.printStackTrace();        }        // ======================================================        //创建一个线程池,该线程池中有3个 线程        ExecutorService threadPool2 = Executors.newFixedThreadPool(3);        CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(                threadPool2);        //提交10个任务        for(int i = 0;i<10;i++)        {            final int value = i;           completionService.submit(new Callable<Integer>() {            @Override            public Integer call() throws Exception {                                //Thread.sleep(1000);                return value;            }        });        }        try {            //得到线程执行完之后的结果,那个线程任务先执行完就先返回,因为提交了10个任务            //所以得到的时候也要分10次得到            for (int i = 0; i < 10; i++) {                System.out.println(completionService.take().get());            }        } catch (Exception e) {            e.printStackTrace();        }    }}// =======================================================class Person {    private String name;    private Integer age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public Person(String name, Integer age) {        super();        this.name = name;        this.age = age;    }    @Override    public String toString() {        return "Person [name=" + name + ", age=" + age + "]";    }}//该片段来自于http://byrx.net
相关栏目:

用户点评