实现线程池(一)线程池的基本概念

本文探讨了线程池的设计理念及其在性能优化中的作用,通过对比线程的生命周期,阐述了线程池如何减少创建和销毁的开销,以及它作为线程生命周期管理者的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开篇

有关这个系列的题目,我也纠结了一阵子。不知道该如何取名,原本想着叫“Java 线程池代码解读”,后来觉得单纯的代码解读,很可能无法理解其设计的精髓。思来想去,觉得还是叫“实现一个线程池”比较合适。为什么呢?

很多人可能会有疑惑,既然Java已经提供了优秀的线程池,为什么我们还要考虑去实现一个线程池呢,不都说不要重复造轮子嘛。我想是这样的,当一个想成为优秀“匠人”的人,在面对一个设计精良的“轮子”时,总抑制不住好奇和冲动,想知道这“轮子”是怎么造成来的。

那既然式想了解“轮子”是怎么造的,我们直接看“图纸”不就可以了嘛,干嘛还再画一遍“图纸”呢?

这里面的差距是很大的,当我们看“图纸”的时候,总会有种错觉,感觉就应该这么设计,而忽略了最重要的问题,为什么要这么设计呢。如果我们不是造轮子的人,我们是不会深刻理解的。而当我们尝试“重复”造轮子的时候,我们会和优秀的“匠人”产生思想的碰撞,这种思想的碰撞,会产生深刻的记忆和反思。

为什么需要线程池?

线程池本身是池化技术之一,和数据库连接池一样,使用线程池主要是出于以下的考虑

  • 减少创建时的开销,节省性能
  • 统一的管理,便于监控

我们看一个单线程的例子,一个线程的完整周期大致需要3个步骤

  1. 线程的创建和资源分配(T1)
  2. 线程执行(T2)
  3. 线程结束和资源回收(T3)

整个线程的执行时长T=T1+T2+T3 实际上,我们可以看到,除了T2之外,T1和T3是可以通过线程池节省出来的。这也是线程池的一个很重要的目标,线程池托管线程的创建和销毁,也就是说,线程池是线程生命周期的管理者,这一点非常重要。

一个线程池应该具备哪些条件?

  • 线程的生命周期管理,主要包括创建和回收
  • 线程池的生命周期,初始化,执行,销毁等
  • 任务,指的是具体每个线程要执行的
  • 任务队列,主要用于存放任务,缓存等待。

转载于:https://juejin.im/post/5d04e2466fb9a07ea803c88f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值