Future 接收异步调用的返回值

2019-03-24  本文已影响0人  良人与我

java 从1.5 版本后提供 Executors 类可以方便的创建线程池。
在异步调用时候,就是通过线程池里的线程去执行任务。
那如何获取到执行的结果呢 - Future
通过代码来看如何获取返回值

public class ExecutorsTest {
    private static final Logger logger = LoggerFactory.getLogger (ExecutorsTest.class);
    private ExecutorService executor = Executors.newSingleThreadExecutor();

    public static void main(String[] args) {
        ExecutorsTest executorsTest = new ExecutorsTest ();
        logger.info ("start test");
        executorsTest.sendMsg ("hello river");
        executorsTest.sendMsg ("I am fine ,thank you");
    }

    public void sendMsg(String msg){
    
        Future<String> future = executor.submit(new CallableRequest(msg));
        try {
            System.out.println(future.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

    class CallableRequest implements Callable<String> {

        private String msg ;

        public CallableRequest(String msg) {
            super();
            this.msg = msg;
        }

        @Override
        public String call() {
            return  "message : " + msg ;
        }
    }

}

执行结果

message : hello river
message : I am fine ,thank you

通过Future的get方法获取到了,异步执行线程方法的返回值。

上一篇 下一篇

猜你喜欢

热点阅读