java.util.concurrent——线程池

1.线程池优点:


第一:降低资源消耗.通过重复利用自己创建的线程降低线程创建和销毁造成的消耗.
第二: 提高响应速度.当任务到达时,任务可以不需要等到线程和粗昂就爱你就能立即执行.
第三: 提高线程的可管理性.线程是稀缺资源,如果无限的创阿金,不仅会消耗资源,还会较低系统的稳定性,使用线程池可以进行统一分配,调优和监控.

2.线程池的常见类别

newSingleThreadExecutor:一个单线程的线程池,可以用于需要保证顺序执行的场景,并且只有一个线程在执行。

newFixedThreadPool:一个固定大小的线程池,可以用于已知并发压力的情况下,对线程数做限制。

newCachedThreadPool:一个可以无限扩大的线程池,比较适合处理执行时间比较小的任务。

newScheduledThreadPool:可以延时启动,定时启动的线程池,适用于需要多个后台线程执行周期任务的场景。

newWorkStealingPool:一个拥有多个任务队列的线程池,可以减少连接数,创建当前可用cpu数量的线程来并行执行。

2.1 应用场景

1.需要大量的线程来完成任务,且完成任务的时间较短。例如Web服务器完成网页请求,因为单个任务小且任务量非常的巨大,非常适合线程池技术。可以想一下火爆网站的瞬间访问量。诚然,服务器的处理速度是非常重要的,但是线程池的技术也是重中之重。但是时间较长的任务请求线程池的优点就不明显了。因为这种操作花费的时间和线程的创建销毁时间相比多了很多。

2.对性能要求苛刻的应用,比如要求服务器迅速响应客户请求。

3.接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用。突发性大量客户请求,在没有线程池情况下,将产生大量线程,虽然理论上大部分操作系统线程数目最大值不是问题,短时间内产生大量线程可能使内存到达极限,并出现"OutOfMemory"的错误。
 


3.线程池七大参数

 

3.1 线程池的拒绝策略

面试中的超级大坑,注意!!!

问:你在工作中用过什么线程池?

答:一个也没用过,我们的线程池是自己写的!!当然这个一般都是公司架构师的事,我们只要知道不用直接使用JDK推荐的,尤其在多线程环境中。

ExecutorService threadPool = new ThreadPoolExecutor(七大参数)

3.2 最大线程数的配置

这里根据业务的情况,分为两种配置。

1.CPU密集型:maximumPoolSize=CPU核数+1

2.IO密集型:maximumPoolSize=CPU核数*2

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值