线程池相关

线程池用于优化线程创建和销毁,提高系统效率,控制资源占用。其关键参数包括最小线程数、核心线程数、最大线程数、队列大小和存活时间。线程池不一定保证任务执行顺序,且有拒绝策略处理满载情况。阿里规范建议使用线程池管理多线程。
摘要由CSDN通过智能技术生成

1. 线程池的作用

线程池是一种线程管理技术,它可以在系统初始化时创建一定数量的线程,并将它们放入一个池中等待调用。当有任务需要执行时,线程池中的一个线程会被分配来执行任务,当任务执行完成后该线程会被返回到线程池中,以便下一次使用。

线程池的作用是优化线程的创建和销毁过程,通过重复使用已创建的线程来减少不必要的开销,提高系统性能及效率。它还可以帮助控制线程的数量和资源占用,有效避免由于线程过多而导致系统崩溃的情况的发生

2. 使用线程池的意义

  1. 可以节省时间(架构)
  2. 通过线程池,可以规定线程的名字,我可以知道我这个线程池当中有哪些线程执行了哪些任务,通过日志可以快速定位问题。(管理)

3. 线程池的几个重要参数 

  1. 最小线程数:项目启动的时候,初始化的线程数;
  2. 核心线程数:当线程池的线程都忙碌时,再进来新任务时,由最小线程数扩容到核心线程数;
  3. 最大线程数:当核心线程数满了,当队列也满了,再来新任务,就会创建新线程来执行这个新任务,直到线程数达到最大线程数;
  4. 队列大小:当线程数达到核心线程数,再进来的任务就会进入到队列;
  5. 存活时间:当线程超过多长时间不执行任务,处于空闲状态,线程池会将它回收,直到数量达到核心线程数。

在创建线程池的时候,要结合具体的业务,来规划这些参数。

核心线程数:一般设置为cpu和核数;

最大线程数:一般设置为cpu的核数。

cpu的核数代表着同一时刻,多少个线程可以一起运行。  

4. 线程池拒绝策略

如果说线程数达到最大线程数,并且队列也满了,就要执行拒绝策略。

  1. 报错,告诉开发这个任务线程池执行不了,由开发来决定是否丢弃
  2. 丢弃当前任务
  3. 丢弃队列当中头结点的任务,最先进入队列的任务
  4. 由主线程去执行这个任务

一般情况下,前三种都会有丢弃任务的风险,但是性能都比较好,第4种最稳妥。

Q:最先派给线程池的任务肯定最先执行?

不一定,根据拒绝策略可知,最先派给线程池的任务有可能被丢弃,所以说线程池不能保证顺序。

5. 线程池队列分类

  • 有界队列:有限制,这个队列最多可能容纳多少个,在创建队列的时候就规定好了;
  • 无界队列:没有限制,来多少收多少。

6. 阿里代码规范中强调,只要是使用多线程,就必须要用线程池去管理。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beau Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值