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

    • 面试必问
  • 架构与模式

    • 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部分:专栏总结

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

《手写线程池》实战手写线程池-400行代码手写线程池

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

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

  • 本章难度:★★★☆☆
  • 本章重点:用400行代码手写线程池初始化和执行任务的核心流程以及优雅关闭的核心流程,重点掌握线程池初始化和执行任务的核心流程。从全局视角掌握线程池的核心技术原理,学会融汇贯通,将线程池的编程思想灵活应用到自身实际项目中,提升实际项目的并发处理能力,以及自身的并发编程内功功底。

大家好,我是冰河~~

实践是检验真理的唯一唯一标准,通过《手写线程池》中线程池核心技术篇章的学习,到底有没有真正掌握线程池的核心流程,我们可以自己来手写一个线程池,重点实现线程池初始化和执行任务的核心流程,以此来检验我们是否真正掌握了线程池的核心流程。

一、前言

线程池技术是并发编程领域中,非常重要的核心技术内容,彻底掌握线程池技术不仅可以让你从面试中脱颖而出,还能让你游刃有余的处理工作过程中遇到的系统并发编程问题,提高系统的并发处理能力。并且掌握好线程池技术,也能从根本上提升并发编程功底,进一步突破自己的技术瓶颈。 要知道,对并发编程深入理解的程度,也是普通程序员、高级程序员和架构师的一个重要分水岭。

经过线程池核心技术篇章对JDK线程池核心技术和源码的深入解析,相信小伙伴们对JDK线程池的核心流程和源码细节有了一个全新的认识,接下来,冰河就要带着各位小伙伴大约使用400行代码,来手搓一个含线程池初始化和执行任务和优雅关闭核心流程的简易版线程池。相信大家跟着冰河一起手搓下来,会对线程池的核心原理、执行流程和源码实现有一个更加深入的理解。

注意:为了让小伙伴们能够更加轻松的深入学习和理解线程池的核心技术,我也完全仿照JDK线程池实现了一版可直接运行的线程池,去除了JDK线程池中非核心的功能方法,保留了核心功能,代码已提交,大家拉取对应分支学习即可。。

二、本节诉求

用400行代码手写线程池初始化和执行任务的核心流程以及优雅关闭的核心流程,重点掌握线程池初始化和执行任务的核心流程。从全局视角掌握线程池的核心技术原理,学会融汇贯通,将线程池的编程思想灵活应用到自身实际项目中,提升实际项目的并发处理能力,以及自身的并发编程内功功底。

三、流程梳理

在正式手写线程池之前,我们再次重点梳理下手写线程池执行任务的核心流程。这里,我们直接对标JDK线程池执行任务的核心流程,如图1-1所示。


当向线程池中提交任务时,线程池执行任务的流程如下所示。

(1)向线程池提交任务时,首先会判断线程池中的线程数是否已经达到corePoolSize,如果线程池中的线程数未达到corePoolSize,则直接创建新线程执行任务。否则,进入步骤(2)。

(2)判断线程池中的工作队列是否已满,如果线程池中的工作队列未满,则将任务添加到队列中等待执行。否则,进入步骤(3)。

(3)判断线程池中的线程数是否已经达到maximumPoolSize,如果线程池中的线程数未达到maximumPoolSize,则直接创建新线程执行任务。否则,进入步骤(4)。

(4)执行拒绝策略。

梳理清楚执行流程后,接下来,我们就要开始编码实现了。

四、编码实现

这里,我们会从自定义异常、自定义队列、自定义拒绝策略和自定义线程池等几个角度带着大家一步步手写和实现一个简易版的线程池。

4.1 实现自定义异常

自定义异常用来统一封装手写线程池时对外抛出的异常。

源码详见:io.binghe.framework.plugin.concurrent.exception.ConcurrentException。

查看完整文章

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

在 GitHub 上编辑此页
上次更新: 2026/5/2 00:42
Contributors: binghe001
阅读全文
×

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

星球会员
跳转链接