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情况相关推荐

  1. 一篇就够,线程与线程池的那些事之线程池篇

    本文关键字: 线程 , 线程池 , 单线程 , 多线程 , 线程池的好处 , 线程回收 , 创建方式, 核心参数 , 底层机制 , 拒绝策略 , 参数设置 , 动态监控 , 线程隔离 线程和线程池相关 ...

  2. 线程池(一):线程池参数及使用说明

    目录 一.线程池是什么? 二.线程池参数说明 三.线程池生命周期 四.四种常见线程池 总结 一.线程池是什么? 线程池,是指管理一组工作线程的的资源池.线程池与任务队列密切相关,其中在任务队列work ...

  3. 并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究

    并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究 http://www.importnew.com/25668.html 一. 前言 常用的并发队列有阻塞队列和非阻塞队列 ...

  4. java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...

    线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...

  5. 【Java 并发编程】线程池机制 ( 线程池执行任务细节分析 | 线程池执行 execute 源码分析 | 先创建核心线程 | 再放入阻塞队列 | 最后创建非核心线程 )

    文章目录 一.线程池执行任务细节分析 二.线程池执行 execute 源码分析 一.线程池执行任务细节分析 线程池执行细节分析 : 核心线程数 101010 , 最大小成熟 202020 , 非核心线 ...

  6. 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )

    文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...

  7. 记一次线上压测Dubbo线程池队列满的问题

    本文记录一次线上全链路压测出现的Dubbo线程池队列满的问题. 1 问题描述 线上做全链路压测,其中涉及三个系统,调用关系A->B->C,均是dubbo调用.压测的时候C出现CPU满导致服 ...

  8. java线程优先级队列等待_java线程池队列优先级(插队)Demo

    在做线程池操作的时候,突然来个加紧处理时,会很纠结,不知道怎么处理让加紧的线程插队先执行.该Demo使用了自定义线程池,采用优先级阻塞式队列(PriorityBlockingQueue)的方式来处理插 ...

  9. javaWeb 使用线程池+队列解决订单并发问题

    解决方式:使用线程池+队列 项目基于Spring,如果不用spring需要自己把 ThreadPoolManager.java 改成单例模式 1.写一个Controller(Spring mvc) / ...

最新文章

  1. linux valgrind Memcheck--内存检查工具
  2. iOS音频——AudioToolbox
  3. ios端 input输入框遮挡问题解决
  4. 麦库:盛大的知识管理软件
  5. 使用ASP.NET Core MVC的Vue.Js
  6. 移植性问题のerror C2664: strcpy : 不能将参数 2 从 CString 转换为 const char *怎么回事?...
  7. android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能,高仿京东下拉刷新,轻松上手!...
  8. 二扩域元素与整数的转换
  9. 【Python实例第7讲】真实数据集的异常检测
  10. 坚果手机 误进FastBoot Mode解决方案
  11. 亚马逊卖家运营必备八大工具
  12. 0、EasyExcel自定义转换器Converter
  13. GNS3 mac环境安装并搭建vlan
  14. XML系列(一)------初识XML
  15. Greedy is Good
  16. app消息推送服务器端,系统服务:APP消息推送服务
  17. linux+++乘法口诀_通过shell脚本打印乘法口诀表
  18. OpenCV这么简单为啥不学——1.5、解决putText中文乱码问题
  19. 奇异值分解(SVD)方法求解最小二乘问题
  20. 基于STM32单片机的风力摆控制系统

热门文章

  1. 《趣学算法(第2版)》读书笔记 Part 4 :贪心算法基础(操作)
  2. 利用PYTHON将netcdf(.nc)格式数据转换成JSON GeoJSON
  3. Ubuntu 有哪些发行版本,及各版本名称及代号
  4. 7岁女孩练书法2年字迹矫若惊龙
  5. 如何理解Logistic函数
  6. 数字IC验证:电路基础知识(数字IC、SOC等)
  7. win10 64位系统下 汇编语言环境搭建
  8. 协同办公软件(支持英文版、简体版、繁体版)
  9. emqttd学习总结
  10. 第一封情书——祝老婆生日快乐