线程池的原理及底层实现,线程池的结构和原理

首页 > 经验 > 作者:YD1662022-11-03 05:47:00

作者:指尖上的榴莲

www.jianshu.com/p/704a6c5d337c

一.概述

线程池,顾名思义就是存放线程的池子,池子里存放了很多可以复用的线程。

如果不用类似线程池的容器,每当我们需要执行用户任务的时候都去创建新的线程,任务执行完之后线程就被回收了,这样频繁地创建和销毁线程会浪费大量的系统资源。

因此,线程池通过线程复用机制,并对线程进行统一管理,具有以下优点:

ThreadPoolExecutor是线程池框架的一个核心类,本文通过对threadPoolExecutor源码的分析(基于JDK 1.8),来深入分析线程池的实现原理。

二.ThreadPoolExecutor类的属性

先从ThreadPoolExecutor类中的字段开始:

线程池的原理及底层实现,线程池的结构和原理(1)

在ThreadPoolExecutor类的这些属性中,线程池状态是控制线程池生命周期至关重要的属性,这里就以线程池状态为出发点进行研究。

通过上面的源码可知,线程池的运行状态总共有5种,其值和含义分别如下:

然而,线程池中并没有使用单独的变量来表示线程池的运行状态,而是使用一个AtomicInteger类型的变量ctl来表示线程池的控制状态,其将线程池运行状态与工作线程的数量打包在一个整型中,用高3位来表示线程池的运行状态,低29位来表示线程池中工作线程的数量,对ctl的操作主要参考以下几个函数:

线程池的原理及底层实现,线程池的结构和原理(2)

接下来,我们看一下线程池状态的所有转换情况,如下:

通常情况下,线程池有如下两种状态转换流程:

三.ThreadPoolExecutor类的构造方法

通常情况下,我们使用线程池的方式就是new一个ThreadPoolExecutor对象来生成一个线程池。接下来,先看ThreadPoolExecutor类的构造函数:

线程池的原理及底层实现,线程池的结构和原理(3)

接下来,看下最后一个构造函数的具体实现:

线程池的原理及底层实现,线程池的结构和原理(4)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.