为什么不建议用Executors?
为什么不建议用Executors?
Java为什么要创建Executors类? 考虑到ThreadPoolExecutor的构造函数实在是有些复杂,所以Java并发包里提供了一个线程池的静态工厂类Executors,利用Executors你可以快速创建线程池。由下图可见,使用Executors类中提供的几个静态方法来创建线程池,内部实现均使用了 ThreadPoolExecutor 实现,其实都只是ThreadPoolExecutor 类的封装。
不建议使用Executors的最重要的原因是:Executors提供的很多方法默认使用的都是无界的LinkedBlockingQueue(如下图),高负载情境下,无界队列很容易导致OOM,而OOM会导致所有请求都无法处理,这是致命问题。所以强烈建议使用有界队列。 注:LinkedBlockingQueue是有界队列,但是不设置大小的话,就默认为Integer.MAX_VALUE,相当于无界队列了。
Executors 返回的线程池对象的弊端:
1)FixedThreadPool 和 SingleThreadPool:
允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。
2)CachedThreadPool 和 ScheduledThreadPool:
允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM。
关于Executors的更多资料可以参考: https://blog.csdn.net/Henry_Lin_Wind/article/details/103768194
为什么不建议用Executors?相关推荐
- Executors.newFixedThreadPool(NTHREADS)线程池数量设置多少合适?
并发编程中线程池 是跑不了的, 用过线程池的朋友 都会遇到这样的一个问题: 如何合理地估算线程池大小? 怎么样设置 数量,执行效率最高? 怎么样设置 内存消耗最低? 是不是设置 线程池数量越大越好? ...
- Java基础加强重温_08:线程不安全、线程同步、线程状态、线程状态切换、线程池(Executors类、newFixedThreadPool)、死锁、Lambda表达式、Stream
摘要 Java基础加强重温_08: 线程安全(线程安全概念.线程不安全案例). 线程同步(同步代码块.同步方法.Lock锁,锁对象). 线程状态(new新建.Runnable可运行.Blocked锁阻 ...
- 由于不知线程池的bug,某Java程序员叕被祭天
说说你对线程池的理解? 首先明确,池化的意义在于缓存,创建性能开销较大的对象,比如线程池.连接池.内存池.预先在池里创建一些对象,使用时直接取,用完就归还复用,使用策略调整池中缓存对象的数量. Jav ...
- 【并发编程】线程池--Executor框架
简介 我们知道线程池就是线程的集合,线程池集中管理线程,以实现线程的重用,降低资源消耗,提高响应速度等.线程用于执行异步任务,单个的线程既是工作单元也是执行机制,Eexecutor作为灵活且强大的异步 ...
- 生产上第一使用线程池后的总结与反思
生产上与 esb 交互时,因为系统后台造数使得 esb 接收响应报文超时.先将造数逻辑修改成线程池异步调用.第一次使用,记录一下学习的历程. [1]Java向多线程中传递参数的三种方法 https:/ ...
- java并发编程面试
文章目录 1.为什么要使用线程池? 2.你们哪些地方会使用到线程池? 3.线程池有哪些作用? 4.线程池的创建方式? 5.线程池底层是如何实现复用的? 6.ThreadPoolExecutor 核心参 ...
- java 线程 定时器_java 多线程定时任务
一.概述 New Thread的弊端如下: a.每次New Thread新建对象性能差. b.线程缺乏统一的管理,可能无限制的新建线程,相互之间竞争,极可能占用过多的系统资源导致死机 或者 OOM. ...
- JAVA day27,28 线程池
一.线程池 1.线程间通信 概念:多个线程在处理同⼀个资源,但是处理的动作(线程的任务)却不相同. 为什么要处理线程间通信: 多个线程并发执⾏时, 在默认情况下CPU是随机切换线程的,当我们需要多个线 ...
- 深入理解java中的线程池
线程池中各个参数的含义 corePoolSize: 核心池的大小,这个参数跟线程池的实现原理有非常大的关系.**在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行 ...
最新文章
- intelliJ idea 下载安装
- [scala-spark]3. 变量 数据类型 分支与循环
- 操作系统:SFTP相关知识介绍
- Web Service简介
- Docker容器开机自动启动
- 大屏监控系统实战(7)-后端整合MybatisPlus并暴露服务
- Quick-Cocos2d-x初学者游戏教程2
- react dispatch_记 react 项目在 TypeScript 化中的一个坑,以及相应的类型改动
- 通过批处理调用SQL*Plus执行批量脚本
- node服务器给客户端发消息,上的node.js发送消息客户端 - 服务器 - 客户端上socket.io(Sen...
- LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
- Virtuabox 虚拟机克隆方法
- 1088 旅行问题(单调队列优化)
- 数据挖掘-贡献度分析
- mysql 有没有minus_MySQL实现差集(Minus)和交集(Intersect)
- dcn网络与公网_DCN网络安全
- java 时分秒 转换 秒_【Java】 秒转时分秒天
- 如果你真的想要做好互联网项目 请不要将项目的技术外包
- 细数企业级移动应用应该具备的5大特征
- 【2020春招记录】网易雷火笔试