源码:java.util.concurrent.Callable<V> 源码解析

1. TODO


2. 脑图

  1. Xmind

  2. Edraw

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


3. 基础部分

3.1. Callable 概述

Callable 是一个接口

实现 Callable 接口的具体实现类,表示一个可被线程执行的任务,我们称之为 “Callable 任务”

Runnable 任务相比,Callable 任务既可以有返回值,也可以抛出异常

[!NOTE] 注意事项

  1. Java 中,线程执行的任务,通常是指 Runnable 任务和 Callable 任务
  2. RunnableJava1 就出现了,但是 Runnable 任务既不能抛出受检异常,也没有返回值。执行 Runnable 就感觉进入了一个黑盒子,没有一点反馈,于是我们在 Java5 引入了 Callable
  3. 需要注意的是,这里有一个 “坑”:
    1. Thread 在设计之初就是只能用来执行 Runnable 任务,不能直接执行 Callable 任务(即 本地线程 ➔ Thread#run ➔ target#run,这里的 target 就是一个 Runnable 任务)
    2. 除此之外,即便能执行 Callable 任务,如何拿到这个 Callable 任务的返回值,也是一个问题
    3. 我们的解决思路通常是:
      1. 将实现 Callable 接口的具体实现类,作为实现 Runnable 接口的具体实现类的属性,当线程调用实现 Runnable 接口的具体实现类时,会调用其 run,我们在 run 中再去调用实现 Callable 接口的具体实现类的 call,然后将 call 的返回值,也作为实现 Runnable 接口的具体实现类的属性
      2. FutureTask 就是这样做的,详见源码:FutureTaskobsidian 内部链接:源码:java.util.concurrent.FutureTask<V>源码解析Hexo 链接:)

4. 源码部分

1
2
3
4
5
6
@FunctionalInterface
public interface Callable<V> {

V call() throws Exception;

}


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