模拟下线程池队列无界或线程无限的OOM情况
Idea先修改下JVM运行参数,改小些,容易测试出结果
先拿newSingleThread这个等待队列是无界的线程池模拟OOM情况
public class TestMain {//newSingleThread这个类型的线程池,等待队列是无界的static ExecutorService executorService = Executors.newSingleThreadExecutor();static class Task implements Runnable {@Overridepublic void run() {try {TimeUnit.SECONDS.sleep(1000000);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) throws Exception {for (int i = 0; i < Integer.MAX_VALUE; i++) {executorService.execute(new Task());}}
}
运行结果如下:
发现任务量太多的情况下,一直往队列放,很快就会出现OOM了。
再拿newCachedThreadPool这个线程数目是无限的线程池模拟OOM情况
public class TestMain {//newCachedThreadPool这个类型的线程池,线程数是无限的static ExecutorService executorService = Executors.newCachedThreadPool();static class Task implements Runnable {@Overridepublic void run() {try {TimeUnit.SECONDS.sleep(1000000);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) throws Exception {for (int i = 0; i < Integer.MAX_VALUE; i++) {executorService.execute(new Task());}}
}
运行结果如下:
总结
细心的可以发现,虽然队列无界或线程无限都可能导致OOM情况的出现,但是异常提示信息还是有所不同的。
模拟下线程池队列无界或线程无限的OOM情况相关推荐
- 一篇就够,线程与线程池的那些事之线程池篇
本文关键字: 线程 , 线程池 , 单线程 , 多线程 , 线程池的好处 , 线程回收 , 创建方式, 核心参数 , 底层机制 , 拒绝策略 , 参数设置 , 动态监控 , 线程隔离 线程和线程池相关 ...
- 线程池(一):线程池参数及使用说明
目录 一.线程池是什么? 二.线程池参数说明 三.线程池生命周期 四.四种常见线程池 总结 一.线程池是什么? 线程池,是指管理一组工作线程的的资源池.线程池与任务队列密切相关,其中在任务队列work ...
- 并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究
并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究 http://www.importnew.com/25668.html 一. 前言 常用的并发队列有阻塞队列和非阻塞队列 ...
- java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...
线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...
- 【Java 并发编程】线程池机制 ( 线程池执行任务细节分析 | 线程池执行 execute 源码分析 | 先创建核心线程 | 再放入阻塞队列 | 最后创建非核心线程 )
文章目录 一.线程池执行任务细节分析 二.线程池执行 execute 源码分析 一.线程池执行任务细节分析 线程池执行细节分析 : 核心线程数 101010 , 最大小成熟 202020 , 非核心线 ...
- 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )
文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...
- 记一次线上压测Dubbo线程池队列满的问题
本文记录一次线上全链路压测出现的Dubbo线程池队列满的问题. 1 问题描述 线上做全链路压测,其中涉及三个系统,调用关系A->B->C,均是dubbo调用.压测的时候C出现CPU满导致服 ...
- java线程优先级队列等待_java线程池队列优先级(插队)Demo
在做线程池操作的时候,突然来个加紧处理时,会很纠结,不知道怎么处理让加紧的线程插队先执行.该Demo使用了自定义线程池,采用优先级阻塞式队列(PriorityBlockingQueue)的方式来处理插 ...
- javaWeb 使用线程池+队列解决订单并发问题
解决方式:使用线程池+队列 项目基于Spring,如果不用spring需要自己把 ThreadPoolManager.java 改成单例模式 1.写一个Controller(Spring mvc) / ...
最新文章
- linux valgrind Memcheck--内存检查工具
- iOS音频——AudioToolbox
- ios端 input输入框遮挡问题解决
- 麦库:盛大的知识管理软件
- 使用ASP.NET Core MVC的Vue.Js
- 移植性问题のerror C2664: strcpy : 不能将参数 2 从 CString 转换为 const char *怎么回事?...
- android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能,高仿京东下拉刷新,轻松上手!...
- 二扩域元素与整数的转换
- 【Python实例第7讲】真实数据集的异常检测
- 坚果手机 误进FastBoot Mode解决方案
- 亚马逊卖家运营必备八大工具
- 0、EasyExcel自定义转换器Converter
- GNS3 mac环境安装并搭建vlan
- XML系列(一)------初识XML
- Greedy is Good
- app消息推送服务器端,系统服务:APP消息推送服务
- linux+++乘法口诀_通过shell脚本打印乘法口诀表
- OpenCV这么简单为啥不学——1.5、解决putText中文乱码问题
- 奇异值分解(SVD)方法求解最小二乘问题
- 基于STM32单片机的风力摆控制系统