java线程池初探

说到java线程池,对我们这些普通的应用开发者来说,可能是既熟悉又陌生,为什么这样讲呢?熟悉是指我们对线程池是耳熟能详,跟人说起总能唠嗑几句;而陌生,是指我们对线程池的设计与实现的陌生,是对java jdk对线程池的实现细节的陌生,所以对于线程池,我们可能停留在能唠嗑几句的层面。

线程池是对象池的一种,也就是我们常说的池化技术的一种具体实现,类似的有数据库的连接池 ,Netty ByteBuf缓冲池等,为什么我们需要池化的技术?说到底,是为了对硬件资源的充分规划和复用,避免内存抖动从而提高资源的利用率和性能,更能保证软件系统的稳定性和可控性。

这些考虑在线程资源的设计上体现得更加明显,我们都知道,线程在java程序中是最重要的资源,可能没有之一,一方面体现在创建线程需要耗费内存,这里包括堆上和虚拟机栈,另一方面体现在线程调度上需要耗费cpu资源,可以说线程是一个重资源的组件,用得不好可能造成系统不可用,最常见错误是造成内存泄漏。所以对线程进行池化是很有必要和迫切的。

那么线程池又该怎么去设计?

首先,我们需要先想清楚线程池的需求是什么,此时需要我们切换成产品经理的思维去想需求,线程池的需求有哪些?以下罗列了一些可能很有必要的需求:

1)线程池需要自动调节和掌控线程的生命周期(包括线程的创建,使用和摧毁)

2)线程池需要控制线程数量的大小(就像国家对人口的规划和控制一般)

3)线程池需要对任务进行管理(包括任务的存储,分配,执行,返回值,丢弃策略等)

4)线程池需要把控自身的生命周期(包括线程池的创建,使用和关闭)

5)线程池需要针对不同应用场景个性化定制(线程池需要不同种类)

针对上诉需求,java jdk又是如何设计的?且听下回分解:

《java线程池数据结构》

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容