Java并发编程系列 | FutureTask原理详解

本文深入探讨FutureTask的原理,包括其在异步任务执行中的作用、get方法的实现、超时机制以及如何处理多个线程调用get的情况。通过源码分析,解释了FutureTask如何在任务完成后唤醒等待线程并处理中断异常。
摘要由CSDN通过智能技术生成

Java并发编程系列文章

欢迎大家观看我的博客,会不断的修正和更新文章,也欢迎大家一起交流

FutureTask简介

依旧是在看hystrix源码的时候,看到它底层实现用到了FutureTask,以前只是学习的时候写了几个示例,实际项目中也很少用到这个类,但是既然一些框架底层用到了这些感觉还是比较重要的,学一下底层的原理。
FutureTask的使用主要是在执行异步任务的基础上实现了带返回值的功能,相对于之前使用Thread和ThreadPool来说,可以异步执行任务,并且在想要获得结果的时候再等待其执行完返回结果。
所以,接下来就通过源码,来分析一下下面的几个问题:

  1. FutureTask的运行原理
  2. get和带超时的get的实现原理
  3. 多个线程调用get

运行流程

先从run方法开始看起

    public void run() {
   
        if (state != NEW ||
            !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                         null, Thread.currentThread()))
            return;
        try {
   
            Callable<V> c = callable;//获取传入进来的Callable任务
            if (c != null && state == NEW) {
   
                V result;
                boolean ran;
                try {
   
                    result = c.call();//执行Callable任务
                    ran = true;
                } catch (Throwable ex) {
   
                    result = null;
                    ran = false;
                    setException(ex);//将捕获到的异常记录下来
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值