并发编程之线程池原理

本文详细介绍了线程池的作用,如资源复用、控制线程数量以提高并发执行效率。线程池相关API包括Executor、ExecutorService、ScheduledExecutorService等,以及线程池的创建和管理。线程池原理部分讲解了ThreadPoolExecutor的核心组件如工作线程、任务队列、拒绝策略等,还阐述了线程池的执行流程。最后,文章提到了线程池的监控方法,如获取线程池大小、活动线程数和任务统计等。
1. 线程池作用

使用背景

  • 在并发大量异步任务处理程序中,每执行一个任务就需要创建一个线程,同时任务执行完毕之后需要将线程销毁.我们知道JVM创建线程的时候需要为其分配线程栈空间以及一些初始化操作,同时销毁的过程需要回收线程栈空间并由gc释放资源,期间都需要耗费一定的时间,因此一个任务的最终执行时间=创建线程newTime + 程序执行excuteTime + 线程销毁的gcTime,如果期间newTime+gcTime > excuteTime,那么这时候执行任务创建线程在程序中就显得十分不划算
  • 线程执行需要JVM分配线程栈空间,需要从系统内存申请,如果创建的线程过多,那么就容易导致内存空间不够用导致内存溢出,默认的线程栈空间大小是1M
  • 线程是由操作系统的CPU进行调度,因此并发多线程执行时CPU需要分配时间片并发执行线程,也就是线程并发执行是需要来回切换CPU的context,严重影响性能
  • 并发环境下,如果创建的线程很多,增加对线程的维护和管理的困难

作用

  • 运用资源重复利用的思维,我们建立一个“池”的概念,多任务异步执行通过线程池实现线程复用,利用池化技术来分配和管理线程的使用,避免线程频繁创建和销毁消耗更多的时间,提高并发执行效率
  • 其次,通过线程池我们可以控制线程的数量,可以根据指定的策略来管理线程,比如任务过多,线程处理不过来,可以分配新的线程,当线
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

疾风先生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值