java 线程池实现原理分析

最近看源码有点小感悟:要带着问题去看源码,这样才不至于把看源码当成了走马观花

自1.5加入 java.util.concurrent 包之后,java在多线程方面又有了里程碑式的提升,今天来聊一聊多线程中java线程池的实现。
今天要根据以下的几个问题来分析一下java线程池:
1.线程池的主体结构,其中有哪些重要的成员变量
2.往线程池中添加一个任务到底发生了什么
3.线程池的实现原理,创建线程的时机 (重点)
4.线程复用的实质 (重点)
5.任务如果有返回值,完成后返回值的获取
6.线程池的关闭
7.线程池的拒绝策略,什么时候会使用拒绝策略
8.OkHttp3中线程池的使用(分析okhttp源码的时候再说)

1.首先来看看线程池的主体结构与重要的成员变量
java 线程池实现原理分析_第1张图片
线程池组成.png

下面主要分析这几个类之间的关系与组成

1.Executor是整个框架的基石,其中只有一个execute方法用于往线程池中添加任务(执行任务)而另外一种往线程池中添加任务的方式是调用ExecutorService 中的submit。

2.ExecutorService 继承自 Executor,其主要作用是用来管理线程池的生命周期,同时也能往线程池中添加任务。

3.AbstractExecutorService继承自ExecutorService,其主要作用是实现了 submit 方法,同时提供了一系列批量添加任务的invokeAny方法

4.ThreadPoolExecutor是最主要的结构体,实现添加任务与线程调度,同时包含线程池的拒绝策略。

5.FutureTask实现了Runnable 与 Future接口,所以最终任务的执行是执行该类中的run方法,同时返回值也是在该类中获取

6.线程池中目前共有4中已经实现的拒绝策略,如果需自定义也可以自己实现逻辑

7.ThreadPoolExecutor中的几个重要变量 :
(1)corePoolSize:核心线程数
(2)

你可能感兴趣的:(java 线程池实现原理分析)