加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

为什么阿里要禁用 Executors 建设线程池?

发布时间:2019-11-14 03:00:23 所属栏目:建站 来源:佚名
导读:【线上直播】11月21日晚8点贝壳技能总监侯圣文《数据安详之数据库安详黄金法例》 看阿里巴巴开拓手册并发编程这块有一条:线程池不应承行使Executors去建设,而是通过ThreadPoolExecutor的方法,通过源码说明禁用的缘故起因。 写在前面 起首感激各人在盖楼的间
副问题[/!--empirenews.page--] 【线上直播】11月21日晚8点贝壳技能总监侯圣文《数据安详之数据库安详黄金法例》

看阿里巴巴开拓手册并发编程这块有一条:线程池不应承行使Executors去建设,而是通过ThreadPoolExecutor的方法,通过源码说明禁用的缘故起因。

为什么阿里要禁用 Executors 建设线程池?

写在前面

起首感激各人在盖楼的间隙阅读本篇文章,通过阅读本篇文章你将相识到:

  • 线程池的界说
  • Executors建设线程池的几种方法
  • ThreadPoolExecutor工具
  • 线程池执利用命逻辑和线程池参数的相关
  • Executors建设返回ThreadPoolExecutor工具
  • OOM非常测试
  • 怎样界说线程池参数

假如只想知道缘故起因,看下面

线程池的界说

打点一组事变线程。通过线程池复用线程有以下几点利益:

镌汰资源建设 => 镌汰内存开销,建设线程占用内存

低落体系开销 => 建设线程必要时刻,会耽误处理赏罚的哀求

进步不变不变性 => 停止无穷建设线程引起的OutOfMemoryError【简称OOM】

Executors建设线程池的方法

按照返回的工具范例建设线程池可以分为三类:

  • 建设返回ThreadPoolExecutor工具
  • 建设返回ScheduleThreadPoolExecutor工具
  • 建设返回ForkJoinPool工具

本文只接头建设返回ThreadPoolExecutor工具

ThreadPoolExecutor工具

在先容Executors建设线程池要领前先先容一下ThreadPoolExecutor,由于这些建设线程池的静态要领都是返回ThreadPoolExecutor工具,和我们手动建设ThreadPoolExecutor工具的区别就是我们不必要本身传结构函数的参数。

ThreadPoolExecutor的结构函数共有四个,但最终挪用的都是统一个:

  1. public ThreadPoolExecutor(int corePoolSize, 
  2.                           int maximumPoolSize, 
  3.                           long keepAliveTime, 
  4.                           TimeUnit unit, 
  5.                           BlockingQueue<Runnable> workQueue, 
  6.                           ThreadFactory threadFactory, 
  7.                           RejectedExecutionHandler handler) 

结构函数参数声名:

  • corePoolSize => 线程池焦点线程数目
  • maximumPoolSize => 线程池最大数目
  • keepAliveTime => 空闲线程存活时刻
  • unit => 时刻单元
  • workQueue => 线程池所行使的缓冲行列
  • threadFactory => 线程池建设线程行使的工场
  • handler => 线程池对拒绝使命的处理赏罚计策

线程池执利用命逻辑和线程池参数的相关

为什么阿里要禁用 Executors 建设线程池?

执行逻辑声名:

  • 判定焦点线程数是否已满,焦点线程数巨细和corePoolSize参数有关,未满则建设线程执利用命
  • 若焦点线程池已满,判定行列是否满,行列是否满和workQueue参数有关,若未满则插手行列中
  • 若行列已满,判定线程池是否已满,线程池是否已满和maximumPoolSize参数有关,若未满建设线程执利用命
  • 若线程池已满,则回收拒绝计策处理赏罚无法执执行的使命,拒绝计策和handler参数有关

Executors建设返回ThreadPoolExecutor工具

Executors建设返回ThreadPoolExecutor工具的要领共有三种:

  • Executors#newCachedThreadPool => 建设可缓存的线程池
  • Executors#newSingleThreadExecutor => 建设单线程的线程池
  • Executors#newFixedThreadPool => 建设牢靠长度的线程池

Executors#newCachedThreadPool要领

  1. public static ExecutorService newCachedThreadPool() { 
  2.     return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 
  3.                                   60L, TimeUnit.SECONDS, 
  4.                                   new SynchronousQueue<Runnable>()); 

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读