源码:java.util.concurren.Future<V> 源码解析

1. TODO


2. 脑图

  1. Xmind

  2. Edraw

  3. Hexo 地址
    👉 http://blog.wangjia.ink/2025/09/02/源码:java.util.concurren.Future<V>源码解析/


3. 基础部分

3.1. Future 概述

Future 是一个接口

Future 为我们提供了以下方法:

  1. 取消还未执行的任务、停止正在执行的任务(非阻塞)
  2. 查看任务是否已经被撤销或停止(非阻塞)
  3. 查看任务是否已经执行完毕(非阻塞)
  4. 获取任务的结果(阻塞、限时阻塞)

4. 源码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public interface Future<V> {

// 用于非阻塞取消还未执行的任务,停止正在执行的任务
boolean cancel(boolean mayInterruptIfRunning);

// 用于非阻塞查看任务是否已经被撤销或停止
boolean isCancelled();

// 用于非阻塞查看任务是否已经执行完毕(正常退出、异常退出、取消任务)
boolean isDone();

// 用于阻塞获取任务的结果
//
// 如果任务还没有执行完,本地线程进入阻塞状态,Thread 实例进入 WAITING 状态,并被投递到 Future 接口的具体实现类实例中维护的某数据结构,等待被唤醒(LockSupport.unpark)、被中断(Thread#interrupt)
//
// 本地线程进入阻塞状态,Thread 实例进入 WAITING 状态后,能响应中断。线程被唤醒,重新获得 CPU 时间片后,会抛出 InterruptedException 异常,并清除 Thread 实例的中断状态(异常退出或正常退出(发生异常),要看我们是否对该异常进行捕获并处理)
V get() throws InterruptedException, ExecutionException;

// 用于限时阻塞获取任务的结果
//
// 限时阻塞被允许的最长时间为:timeout unit
// 1. 如果超时,抛出 TimeoutException 异常
//
// 如果任务还没有执行完,本地线程进入阻塞状态,Thread 实例进入 TIMED_WAITING 状态,并被投递到 Future 接口的具体实现类实例维护的某数据结构,等待被唤醒(LockSupport.unpark)、被中断(Thread#interrupt)
//
// 本地线程进入阻塞状态,Thread 实例进入 TIMED_WAITING 状态后,能响应中断。线程被唤醒,重新获得 CPU 时间片后,会抛出 InterruptedException 异常,并清除 Thread 实例的中断状态(异常退出或正常退出(发生异常),要看我们是否对该异常进行捕获并处理)
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;

}


源码:java.util.concurren.Future<V> 源码解析
https://wangjia5289.github.io/2025/09/02/源码:java.util.concurren.Future<V>源码解析/
Author
咸阳猴🐒
Posted on
September 2, 2025
Licensed under