<commit_before>---
layout: post
title: "ThreadPoolExecutor 核心源码解析"
subtitle: "本文介绍 ThreadPoolExecutor 源码的关键部分，execute、addWorker、runWorker、Worker"
date: 2019-02-04
author: "ChenJY"
header-img: "img/java.jpg"
catalog: true
tags: 
    - Java Tech
    - Java 并发编程
    - JDK 源码分析
---

本文只介绍 `ThreadPoolExecutor` 源码的关键部分，开篇会先介绍  `ThreadPoolExecutor` 中的一些核心常量定义，然后选取线程池工作周期中的几个关键方法分析其源码实现。其实，看 `JDK` 源码的最好途径就是看类文件注释，作者把想说的全都写在里面了。

### 一些重要的常量

`ThreadPoolExecutor` 内部作者采用了一个 `32bit` 的 `int` 值来表示线程池的运行状态`（runState）`和当前线程池中的线程数目`（workerCount）`，这个变量取名叫 `ctl`（`control` 的缩写），其中高 `3bit` 表示允许状态，低 `29bit`表示线程数目（最多允许 `2^29 - 1` 个线程）。

```java
    private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
    private static final int COUNT_BITS = Integer.SIZE - 3; // 29 位
    private static final int CAPACITY   = (1 << COUNT_BITS) - 1; // 线程池最大容量

    // runState is stored in the high-order bits<commit_msg>content<commit_after>---
layout: post
title: "ThreadPoolExecutor 核心源码解析"
subtitle: "本文介绍 ThreadPoolExecutor 源码的关键部分，execute、addWorker、runWorker、Worker"
date: 2019-02-04
author: "ChenJY"
header-img: "img/java.jpg"
catalog: true
tags: 
    - Java Tech
    - Java 并发编程
    - JDK 源码分析
---

- [一些重要的常量](#一些重要的常量)
- [讨论线程池的状态转换](#讨论线程池的状态转换)
- [线程池的关键逻辑](#线程池的关键逻辑)
- [源码分析](#源码分析)
    - [Worker 类](#worker-类)
    - [execute 方法](#execute-方法)
    - [addWorker 方法](#addworker-方法)
    - [runWorker 方法](#runworker-方法)
- [写在最后](#写在最后)
- [License](#license)

本文只介绍 `ThreadPoolExecutor` 源码的关键部分，开篇会先介绍  `ThreadPoolExecutor` 中的一些核心常量定义，然后选取线程池工作周期中的几个关键方法分析其源码实现。其实，看 `JDK` 源码的最好途径就是看类文件注释，作者把想说的全都写在里面了。

### 一些重要的常量

`ThreadPoolExecutor` 内部作者采用了一个 `32bit` 的 `int` 值来表示线程池的运行状态`（runState）`和当前线程池中的线程数目`（workerCount）`，这个变量取名叫 `ctl`（`control` 的缩写），其中高 `3bit` 表示允许状态，低 `29bit`表示线程数目（最多允许 `2^29 - 1` 个线程）。

```java
    private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
    private static final int COUNT_BITS = Integer.SIZE - 3; // 29 位
    private static final int CAPACITY   = (1 << COUNT_BITS) - 1; // 线程池最大容量

    // runState is stored in the high-order bits
{'fraction_non_alphanumeric': 0.14045214045214044, 'fraction_numerical': 0.022126022126022125, 'mean_word_length': 4.6521739130434785, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4214380', 'n_tokens_mistral': 1142, 'n_tokens_neox': 1201, 'n_words': 173}