ExecutorService的OOM坑
来源:互联网 发布:郑州玲珑科技 数据分析 编辑:程序博客网 时间:2024/06/08 13:16
ExecutorService有下面几种创建方式
Executors.newCachedThreadPool();
Executors.newFixedThreadPool()
Executors.newScheduledThreadPool()
Executors.newSingleThreadExecutor()
Executors.newSingleThreadScheduledExecutor()
抽取其中一个方法查看源码:
publicstatic ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads,nThreads,
0L, TimeUnit.MILLISECONDS,
newLinkedBlockingQueue<Runnable>());
}
/**
* Creates a {@code LinkedBlockingQueue}with a capacity of
* {@link Integer#MAX_VALUE}.
*/
publicLinkedBlockingQueue(){
this(Integer.MAX_VALUE);
}
/**
* A constant holding the maximum value an{@code int} can
* have, 2<sup>31</sup>-1.
*/
public static final int MAX_VALUE = 0x7fffffff;
由上面的方法参数知道,Executors创建的ExecutorService并不能设置控制消息队列的长列,默认长度是2^31,当线程处理速度较慢且并发任务太多时,任务队列的任务将不断堆积,就可能引起OOM。因此建议直接
ThreadPoolExecutor executor = new TThreadPoolExecutor(int corePoolSize,
intmaximumPoolSize,
longkeepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
这样就可以灵活定制队列,建议使用new ThreadPoolExecutor。
- ExecutorService的OOM坑
- FutureTask、ExecutorService的使用
- ExecutorService的任务调度
- ExecutorService的API
- 关于ExecutorService 的用法
- ExecutorService 的使用
- ExecutorService的具体实例
- ExecutorService的shutdown
- ExecutorService的使用
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- error vs exception
- linux学习笔记--ipcrm命令
- 关于java 反射 创建对象 调用 有参数 的 构造函数
- 逐浪CMS标签开发之相关文章列表的制作[进阶篇]
- 第5章 引用类型(2)Array 类型
- ExecutorService的OOM坑
- 移植前的准备工作+ubuntu14.04上网及安装openssh
- C程序设计 例题5.9 判断一个大于3的数是否为素数改进
- Android Multimedia框架总结(二十四)MediaMuxer实现手机屏幕录制成gif图
- (系列一)webkit 的各个模块
- spark streaming 2.0 RateLimiter
- linux 的压缩和打包
- pci简单接口函数
- Windows Server AppFabric简介