《架构风清扬-Java面试系列第22讲》如何获取子线程的执行结果

本文通过示例介绍了Java中的Future和Callable接口在并发编程中的应用,展示了如何使用ExecutorService提交Callable任务,实现异步操作并获取结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来,老规矩,在往下看答案之前,思考下,效果更佳

放个图片只是为了让你有个思考的缓冲

这道题,我们需要结合Future和Callable

来,上代码

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

// 定义一个实现了Callable接口的类,它代表一个可以返回结果的任务
class Task implements Callable<String> {
    @Override
    public String call() throws Exception { // 实现call()方法,该方法会在新线程中运行
        // 这里是耗时的操作,例如计算或网络请求
        Thread.sleep(2000); // 模拟耗时操作
        return "任务执行完成的结果"; // 返回计算得出的结果
    }
}

public class FutureAndCallableExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        
        // 创建一个固定大小的线程池(这里设置为单个线程)
        ExecutorService executor = Executors.newFixedThreadPool(1);

        // 创建Callable对象实例
        Task task = new Task();

        // 提交Callable任务到线程池中执行,并获取Future对象
        Future<String> future = executor.submit(task); // 提交任务并获取Future

        // 主线程继续执行其他逻辑,而不会阻塞等待任务完成
        System.out.println("主线程正在执行其他任务...");

        // 当需要任务的结果时,调用Future对象的get()方法来获取结果,此方法会阻塞直到结果可用
        String result = future.get(); // 阻塞等待,直至获取到任务的执行结果

        // 输出结果
        System.out.println("从Callable任务得到的结果是:" + result);

        // 关闭线程池
        executor.shutdown();
    }
}

搞定!如果内容对你有帮助,欢迎分享给好朋友!

也欢迎加入我的知识星球,更多进阶讲解干货!

长按识别二维码即可加入,敢承诺三天内免费试读,不满意可以直接退出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值