并发编程futuretask

package com.mrbird.api.demoThread.thread1;

/**
 * @Description
 * @Date: 2019/3/29
 */

import java.util.concurrent.*;

/**
 * Future
 * Futures是一个抽象的概念,它表示一个值,该值可能在某一点变得可用。一个Future要么获得
 * 计算完的结果,要么获得计算失败后的异常。
 * Java在java.util.concurrent包中附带了Future接口,它使用Executor异步执行。例
 * 如下面的代码,每传递一个Runnable对象到ExecutorService.submit()方法就会得到一个回调的Future,
 * 你能使用它检测是否执行,这种方法可以是同步等待线处理结果
 * 完成。
 */

public class CallableTest4 {


    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        //实现一个Callable接口
        ThreadDemo threadDemo = new ThreadDemo();
        FutureTask<Netty> futureTask = new FutureTask<Netty>(threadDemo);
        executorService.submit(futureTask);
        executorService.shutdown();
        try {
            //处理完毕后返回的结果
            Netty netty = futureTask.get();
            System.out.println("线程执行完成" + netty.name);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

    static class ThreadDemo implements Callable<Netty> {
        @Override
        public Netty call() throws Exception {
            //这里是你的业务逻辑处理
            //让当前线程阻塞1秒看下效果
            Thread.sleep(5000);
            return new Netty("张三");
        }
    }

    static class Netty {
        private String name;

        private Netty(String name) {
            this.name = name;
        }
    }

}
原文地址:https://www.cnblogs.com/dand/p/10670435.html