135-线程池原理与自定义线程池
JUC包已经实现了非常好用的线程池,在实际开发中大多都使用JUC包下的线程池。
自定义线程池可以帮助理解线程池的工作原理
没有线程池的弊端:多次创建、销毁线程会浪费大量时间。
解决方案:比如服务器,在服务器启动的时候就会(在线程池)创建一些线程,然后有请求访问的时候就会使用其中一个线程做任务,当请求操作结束后线程并不会销毁,而是将线程又回归到线程池中。一个线程可以循环可回收利用,可以处理多个任务。在服务器关闭的时候才会关闭线程。
线程池概念:
- 任务队列:存储待执行的任务
- 拒绝策略:请求任务过多,拒绝一部分任务
- 抛出异常、直接丢弃、阻塞请求、临时队列
- init(min)
- active
- max
min<=active<=max
线程池通用规则:
- 首先线程池创建min个线程,如果处理线程过多会适量增加到active,更多则增加到max。如果线程数量超过了max则会添加到任务队列,如果任务队列满了则会执行拒绝策略。
- 线程执行如果过了顶峰期(比如双十一)需要减少线程池中线程的数据到active(线程过多切换上下文会影响应用性能),如果有过多的任务则又增加线程数量。
线程池异步任务、批量任务
使用到线程池的开源项目:Quartz、Control-M
补充:为什么阿里Java规约禁止使用Java内置Executors创建线程池?
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tuyrk@qq.com
文章标题:135-线程池原理与自定义线程池
文章字数:436
本文作者:神秘的小岛岛
发布时间:2019-12-09, 22:05:18
最后更新:2019-12-13, 23:02:21
原始链接:https://www.tuyrk.cn/wang-thread/135-thread-pool-theory/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。