之前博客的所有内容是对单个线程的操作,例如有Thread和Runnable的使用以及ThreadGroup等的使用,但是对于在有些场景下我们需要管理很多的线程,而对于这些线程的管理有一个统一的管理工具叫做线程池,线程池就是管理很多的线程的一个集合。这篇分享中提出的一个就是关于线程池的概念。
线程池原理
从JDK1.5开始,utils包提供了一个类ExecutorService,这个类是对线程池的实现,关于线程Thread来说,它的整个生命周期中都是需要很好的管理,但是我们频繁的创建或者是销毁线程极大的浪费了系统的资源,那么就需要将线程进行重复的利用。基于这个需求设计出了线程池。
所谓的线程池,从字面上理解就是存放线程的一个容器。当某个任务需要执行的时候,在线程池里的线程就会主动调用这个任务。但是还需要知道这个线程池的资源也是有限的,什么时候对于线程池的资源进行回收,什么时候进行线程的补充,什么如果达到容量之后继续提交任务会是什么状态等等。
基于上面的描述可以知道一个线程池主要具备的要素有以下一些
- 任务队列,用来缓存提交的任务
- 线程池数量管理功能,在线程池执行的任务要在一个可以控制的范围内。例如在使用线程池的时候最为经典的三个参数,第一个参数就是初始化线程的数量,第二参数就是可以扩展的线程池的最大容量,第三个参数就是线程池所能执行的核心任务的数量。其中这个核心线程的数量表示当线程池闲置的时候也要维护的线程的数量。、
- 任务的执行策略,对于正在执行的线程如果达到了线程池的最大容量,之后需要对于后来的任务进行拒绝操作。或者是通知提交者没有资源可以执

本文深入探讨Java高并发编程中的线程池原理,从自定义线程池的角度出发,介绍线程池接口、线程队列、线程工厂、拒绝策略和调用策略的实现。详细讲解了线程池设计的关键要素,包括任务队列大小、线程存活时间及线程池的自我维护功能。最后展示了自定义线程池的使用方法,帮助读者更好地理解和应用线程池。
订阅专栏 解锁全文
2934

被折叠的 条评论
为什么被折叠?



