当前位置:网站首页>【多线程编程】Future接口获取线程执行结果数据

【多线程编程】Future接口获取线程执行结果数据

2022-06-13 05:01:00 阿小冰

两种异步模式

在JAVA的并发编程中,会有两种异步编程模型

  1. 直接以异步的形式来并行运行其他的任务,不需要返回任务的结果数据
  2. 以异步的形式运行其他的任务,需要返回结果

我们只看一下有结果返回的模型

有结果的异步模型

1、使用Future实现异步结果返回

public class FutureDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        Future<String> future = executorService.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "使用Future获取异步结果数据";
            }
        });
        System.out.println(future.get());
        executorService.shutdown();
    }
}

2、使用FutureTask获取异步结果

public class FutureTaskDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> futureTask=new FutureTask<>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "使用FutureTask获取异步结果数据";
            }
        });
        new Thread(futureTask).start();
        System.out.println(futureTask.get());
    }
}

FutureTask也可以结合线程池来使用

public class FutureTaskDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "使用FutureTask + Thread Pool获取异步结果数据";
            }
        });
        executorService.execute(futureTask);
        new Thread(futureTask).start();
        System.out.println(futureTask.get());
    }
}

原网站

版权声明
本文为[阿小冰]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_38377525/article/details/125240025