Last updated on 2025-11-23T21:02:37+08:00
1. TODO
2. 脑图
Xmind
Edraw
Hexo 地址
👉 http://blog.wangjia.ink/2025/09/03/源码:java.util.concurrent.ExecutorService源码解析/
3. 基础部分
ExecutorService 概述
ExecutorService 是一个接口,继承了 java.util.concurrent.Executor

ExecutorService 在 Executor 的基础上,为我们提供了以下方法:
- 关闭线程池(非阻塞)
- 等待线程池关闭(限时阻塞)
- 查看线程池是否关闭(非阻塞)
- 查看线程池是否被执行过
ExecutorService#shutdown 或 ExecutorService#shutdownNow(非阻塞)
- 提交一个
Callable 任务(非阻塞)
- 提交一个
Runnable 任务(非阻塞)
- 提交一批
Callable 任务(阻塞、限时阻塞)
[!NOTE] 注意事项
- 详见源码:
Executor
obsidian 内部链接:
- 源码:java.util.concurrent.Executor源码解析
Hexo 链接:
- http://blog.wangjia.ink/2025/08/31/源码:java.util.concurrent.Executor源码解析/
2. 源码部分
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| public interface ExecutorService extends Executor { void shutdown(); List<Runnable> shutdownNow(); boolean isShutdown(); boolean isTerminated(); boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException; <T> Future<T> submit(Callable<T> task); <T> Future<T> submit(Runnable task, T result); Future<?> submit(Runnable task); <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException; <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException; <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException; <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; }
|
[!NOTE] 注意事项
- 取消任务和停止任务还是有所区别的:取消任务是指取消那些尚未执行的任务。而停止任务则是任务正在执行时,你通过中断去让它停下来。如果任务能够响应中断,那就算是成功停止。但问题在于,如果任务没有响应中断,那么即使你发出了中断请求,它仍然会继续执行。所以 “停止任务” 并不一定能让它 “停止下来”