JAVA之线程池详解

本文深入探讨了Java线程池的原理与应用场景,包括线程池的必要性、不同类型的线程池如newFixedThreadPool和newScheduledThreadPool,以及线程池参数的核心线程数、最大线程数和拒绝策略等。同时,文章指出使用Executors创建线程池可能引发的问题,并推荐使用ThreadPoolExecutor自定义参数以避免潜在风险。最后,展示了如何正确创建和使用线程池的示例代码。
	 一位爱好技术的橘右京的哥哥橘左京

前言

既然讲到了线程池,那我们就先聊一下线程,线程为何物,每一个程序为单独的一个进程,如QQ、网易云,那我们如何理解线程呢,其实在一个进程内至少包含一个线程来作为程序的最小执行单位,如迅雷同时下载多个文件。

线程池

为什么要使用线程池?线程池顾名思义是由多个线程所组成,作用就是减少线程的建立与销毁,与数据库连接池相同概念,为了减少连接与释放,从而降低消耗提升效率。

适用场景

很多小伙伴初识多线程,一直不明白多线程实际的应用,它到底应该应用在什么地方,其实还是要根据你的具体业务来决定是否适用多线程,比如展示详情页需要花费80ms,分八步查询了不同表的数据,每步占10ms,若是同步执行就需要顺序执行组装数据,这时如果引入了多线程来进行查询,只需要10ms多的时间返回数据。

创建方式

Executors类提供了六种不同的线程池创建方案,参数是方法默认的,最终都是通过ThreadPoolExecutor实例。这种方式虽然简单方便,但是也有弊端,在开发者不了解或无意中的使用可能会造成OOM。阿里手册也明确的规定不准直接使用Executors来创建线程池,要使用ThreadPoolExecutor去自定义线程池参数。

1.Executors

第一位登场的是Executors,我们先来展示一下它的方法,从图中可以看到,它给出了六种创建线程的方式,请小伙伴们根据两个一组顺序阅读

Executors创建线程池的方式

1)newCachedThreadPool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值