冰河技术
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
  • 第01部分:专栏介绍

    • 开篇:我要带你一次性彻底吃透线程池核心技术
  • 第02部分:线程池核心技术

    • 第01节:线程池核心原理技术解析
    • 第02节:线程池总体结构技术解析
    • 第03节:线程池执行任务的核心流程解析
    • 第04节:Worker线程核心执行流程解析
    • 第05节:线程池优雅关闭核心流程解析
    • 第06节:定时任务线程池核心技术解析
  • 第03部分:实战手写线程池

    • 实战:400行代码手写线程池
  • 第04部分:专栏总结

    • 总结:手写线程池专栏整体总结

《手写线程池》线程池核心技术:第02节:线程池总体结构技术解析

作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.site
文章汇总:https://binghe.site/md/all/all.html
源码获取地址:https://t.zsxq.com/0dhvFs5oR

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★★☆☆
  • 本章重点:简单介绍线程池的总体结构,重点掌握:线程池的优缺点、Executors类、ThreadPoolExecutor类和线程池顶层接口和抽象类等核心技术。从全局视角掌握线程池的核心技术原理,学会融汇贯通,将线程池的编程思想灵活应用到自身实际项目中,提升实际项目的并发处理能力,以及自身的并发编程内功功底。

大家好,我是冰河~~

在真实高并发场景下,基本上不会直接使用Thread类创建线程,大部分场景下,都是使用线程池来创建并管理线程。可以这么说,学好线程池对于并发编程来说是非常重要的。

一、前言

在线程池核心技术篇章,已经对线程池的核心原理进行了详细的阐述,包括介绍了线程池的核心状态,结合源码的方式介绍了创建线程池的方式,阐述了线程池执行任务的核心流程和线程池的关闭方式。最后,分别介绍了在CPU密集型程序和IO密集型程序中如何确定最佳的线程数。接下来,对线程池的总体结构进行简单的介绍。

二、本节诉求

简单介绍线程池的总体结构,重点掌握:线程池的优缺点、Executors类、ThreadPoolExecutor类和线程池顶层接口和抽象类等核心技术。从全局视角掌握线程池的核心技术原理,学会融汇贯通,将线程池的编程思想灵活应用到自身实际项目中,提升实际项目的并发处理能力,以及自身的并发编程内功功底。

三、线程池简介

线程池的创建和回收是一个非常消耗系统资源的过程,如果在系统中频繁的创建和回收线程,会极大的降低程序的执行性能。并且,短时间内创建大量的线程可能会造成CPU占用100%、死机或者内存溢出等问题。而使用线程池就能过非常轻松的解决这些问题。

3.1 线程池概述

线程池是Java从JDK1.5版本提供的一种线程使用模式,能够自动创建和回收线程,并管理线程的生命周期。在线程池中能够管理和维护多个线程的运行。

Java中的线程池主要是通过Executor框架实现的,主要涉及到Executor接口、ExecutorServcie接口、AbstractExecutorService抽象类、ScheduledExecutorService接口、ThreadPoolExecutor类、ScheduledThreadPoolExecutor和Executors类。线程池核心类继承关系如图2-1所示。


在实现线程池的核心类中,最核心的类是ThreadPoolExecutor类,而ScheduledThreadPoolExecutor类实现了定时任务功能,它能够使提交到线程池中的任务定时、定期执行。另外,除了图2-1所示的接口和类外,为了便于创建线程池,JDK中还提供了一个Executors工具类,Executors类中封装了创建线程池的各种方法,专门用于创建线程池。

不过,在真实的高并发场景下,并不推荐使用Executors工具类创建线程池,而是推荐直接使用ThreadPoolExecutor类创建线程池。

3.2 线程池的优点

这里,综合对比直接使用Thread类创建线程的弊端与使用线程池的优点,来加深小伙伴们对线程池的理解。

1.直接使用Thread类创建线程的缺点

直接在程序中使用Thread类创建线程的方式是非常不可取的,主要体现在如下几个方面。

(1)每次通过Thread类创建一个线程对象的性能是非常差的,每次创建Thread对象后,调用Thread的start()方法,会在操作系统层面分配一个与之对应的线程,这个过程比较耗时。

(2)直接使用Thread类创建线程缺乏有效的统一管理机制,如果在短时间内创建大量的线程,线程之间会相互竞争系统资源,可能会造成CPU占用100%、死机或者内存溢出等问题。

(3)直接使用Thread类创建线程提供的线程功能非常有限,例如,让线程执行更多的任务,定期执行某些任务等场景是通过Thread创建线程无法满足的。

(4)直接使用Thread类创建线程,无法对线程进行有效的监控。

查看完整文章

加入冰河技术知识星球,解锁完整技术文章、小册、视频与完整代码

在 GitHub 上编辑此页
上次更新: 2026/5/2 00:42
Contributors: binghe001
Prev
第01节:线程池核心原理技术解析
Next
第03节:线程池执行任务的核心流程解析
阅读全文
×

扫码或搜索:冰河技术
发送:290992
即可立即永久解锁本站全部文章

星球会员
跳转链接