为什么阿里要禁用 Executors 创建线程池?
副标题[/!--empirenews.page--]
【线上直播】11月21日晚8点贝壳技术总监侯圣文《数据安全之数据库安全黄金法则》
看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因。 写在前面 首先感谢大家在盖楼的间隙阅读本篇文章,通过阅读本篇文章你将了解到:
如果只想知道原因,看下面 线程池的定义 管理一组工作线程。通过线程池复用线程有以下几点优点: 减少资源创建 => 减少内存开销,创建线程占用内存 降低系统开销 => 创建线程需要时间,会延迟处理的请求 提高稳定稳定性 => 避免无限创建线程引起的OutOfMemoryError【简称OOM】 Executors创建线程池的方式 根据返回的对象类型创建线程池可以分为三类:
本文只讨论创建返回ThreadPoolExecutor对象 ThreadPoolExecutor对象 在介绍Executors创建线程池方法前先介绍一下ThreadPoolExecutor,因为这些创建线程池的静态方法都是返回ThreadPoolExecutor对象,和我们手动创建ThreadPoolExecutor对象的区别就是我们不需要自己传构造函数的参数。 ThreadPoolExecutor的构造函数共有四个,但最终调用的都是同一个:
构造函数参数说明:
线程池执行任务逻辑和线程池参数的关系 执行逻辑说明:
Executors创建返回ThreadPoolExecutor对象 Executors创建返回ThreadPoolExecutor对象的方法共有三种:
Executors#newCachedThreadPool方法
(编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |