使用Callable和Future两个类,来获得线程执行后的结果

来源:互联网 发布:停用移动数据总是弹出 编辑:程序博客网 时间:2024/06/06 02:04
package cn.threadPool;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class CallableTest {    /**     * 使用Callable和Future两个类,来获得线程执行后的结果     * (1)execute(Runnable)方法返回的是void     *  (2)要获得返回结果,使用submit方法     *      */    public static void main(String[] args) throws InterruptedException, ExecutionException {    ExecutorService singlePoor= Executors.newSingleThreadExecutor();    //要获取线程的返回结果,需要使用submit方法。    Future<String> future=singlePoor.submit(new Callable<String>(){        @Override        public String call() throws Exception {            return "hello";        }    });System.out.println("等待结果Wie:"+future.get());/** * 使用CompletionService用于提交一组Callable任务,其take方法返回已完成的Callable任务对应的future对象 */// 创建了线程数量为10的线程池,然后添加了10个任务ExecutorService mutiPoor=Executors.newFixedThreadPool(10);CompletionService<Integer> cService=new ExecutorCompletionService (mutiPoor);for(int i=0;i<10;i++){    final int task=i;    cService.submit(new Callable<Integer>(){    @Override    public Integer call() throws Exception {        return task;    }});}// 依次循环,看先输出的是哪个任务的结果for(int i=0;i<10;i++){    System.out.println(cService.take().get());}    }}
0 0
原创粉丝点击