源码:java.util.concurrent.AbstractExecutorService 源码解析

1. TODO


2. 脑图

  1. Xmind

  2. Edraw

  3. Hexo 地址
    👉 http://blog.wangjia.ink/2025/11/03/源码:java.util.concurrent.AbstractExecutorService源码解析/


3. 基础部分

3.1. AbstractExecutorService 概述

AbstractExecutorService 是一个抽象类,实现了 java.util.concurrent.ExecutorService

AbstractExecutorServiceExecutorService 中的部分通用逻辑提供了实现

[!NOTE] 注意事项

  1. 详见源码:ExecutorService
    1. obsidian 内部链接:
      1. 源码:java.util.concurrent.ExecutorService源码解析
    2. Hexo 链接:
      1. http://blog.wangjia.ink/2025/09/03/源码:java.util.concurrent.ExecutorService源码解析/

4. 实例方法

4.1. 实例具体方法

4.1.1. 具体方法(普通)

4.1.1.1. <T> RunnableFuture<T> newTaskFor(Callable<T> callable)

该方法用于非阻塞将 Callable 任务封装成 RunnableFuture 类型(实则是封装成 FutureTask

1
2
3
4
5
protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {

return new FutureTask<T>(callable);

}

4.1.1.2. <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value)

该方法用于非阻塞将 Runnable 任务封装成 RunnableFuture 类型(实则是封装成 FutureTask

1
2
3
4
5
protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {

return new FutureTask<T>(runnable, value);

}

4.1.2. 具体方法(实现)

4.1.2.1. ExecutorService 中接口方法的实现
4.1.2.1.1. Future<?> submit(Runnable task)
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
31
32
33
34
35
36
37
38
39
40
41
42
/**
* ============================================
* 实例具体方法(ExecutorService 接口方法 实现):
* public Future<?> submit(Runnable task)
* --------------------------------------------
* 1. 访问修饰符
* 1. public
* 1. 天下皆公(EveryWhere)
*
* 2. 非访问修饰符
*
* 3. 方法参数
* 1. Runnable task
* 1. 提交的 Runnable 任务
*
* 4. 返回值
* 1. Runnable 任务封装成的 FutureTask 实例
*
* 5. 抛出异常
* 1. NullPointerException
* 1. 传入的 Runnable 任务为 null
*
* 6. 使用示例
*
* ============================================
*/
public Future<?> submit(Runnable task) {

if (task == null) throw new NullPointerException();

// 调用 AbstractExecutorService#newTaskFor,将 Runnable 任务封装成一种 RunnableFuture(实则是封装成 FutureTask)
RunnableFuture<Void> ftask = newTaskFor(task, null);

// 调用 Executor#execute,提交一个 Runnable 任务
execute(ftask);

// 返回 Runnable 任务封装成的 FutureTask
//
// 之所以返回该 FutureTask 实例,是因为我们可能需要通过该 FutureTask 实例,调用 Future<V> 相关的方法,去对该任务进行一系才足以
return ftask;

}

4.1.2.1.2. <T> Future<T> submit(Runnable task, T result)
1
2
3
4
5
6
7
8
9
10
11
public <T> Future<T> submit(Runnable task, T result) {

if (task == null) throw new NullPointerException();

RunnableFuture<T> ftask = newTaskFor(task, result);

execute(ftask);

return ftask;

}

4.1.2.1.3. <T> Future<T> submit(Callable<T> task)
1
2
3
4
5
6
7
8
9
10
11
public <T> Future<T> submit(Callable<T> task) {

if (task == null) throw new NullPointerException();

RunnableFuture<T> ftask = newTaskFor(task);

execute(ftask);

return ftask;

}


源码:java.util.concurrent.AbstractExecutorService 源码解析
https://wangjia5289.github.io/2025/11/03/源码:java.util.concurrent.AbstractExecutorService源码解析/
Author
咸阳猴🐒
Posted on
November 3, 2025
Licensed under