当前位置:网站首页>使用无界队列的线程池会导致内存飙升吗?
使用无界队列的线程池会导致内存飙升吗?
2022-08-02 11:11:00 【华为云】
Executors创建线程池方式有如下几种:
Executors.newFixedThreadPool(10);//LinkedBlockingQueue 无限加入队列Executors.newScheduledThreadPool(10);//DelayedWorkQueue 队列如果满了,阻塞Executors.newSingleThreadScheduledExecutor();//DelayedWorkQueue 队列如果满了,阻塞Executors.newCachedThreadPool();//SynchronousQueue 队列如果满了,抛异常Executors.newSingleThreadExecutor();//LinkedBlockingQueue 无限加入队列
具体细节说明文章:Java线程池Executor详解
本文以Executors.newFixedThreadPool为例
定长线程池,核心线程数和最大线程数由用户传入,超出在队列等待,以下为相关源码。
//newFixedThreadPool创建线程池源码public static ExecutorService newFixedThreadPool(int nThreads) { /** * corePoolSize : 核心线程的数量为自定义输入nThreads * maximumPoolSize : 最大线程的数量为自定义输入nThreads * keepAliveTime : 0L * unit : 秒 * workQueue : LinkedBlockingQueue **/ return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }
newFixedThreadPool和SingleThreadExecutor类似,唯一的区别就是核心线程数不同,并且由于使用的是LinkedBlockingQueue。LinkedBlockingQueue默认的最大任务数量是Integer.MAX_VALUE,非常大,可以理解为无限大吧;但是存在这种情况,当每个线程获取到一个任务后,执行时间比较长,导致workQueue里积压的任务越来越多,机器的内存使用不停的飙升,最后也会导致OOM。
jdk7提供了7个阻塞队列,分别是:
ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列
LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列
PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列
DelayQueue:一个使用优先级队列实现的无界阻塞队列
SynchronousQueue:一个不存储元素的阻塞队列
LinkedTransferQueue:一个由链表结构组成的无界阻塞队列
LinkedBlockingDueue:一个 由链表结构组成的双向阻塞队列
线程池工作原理图解:
边栏推荐
猜你喜欢
OLED的HAL库代码介绍及使用(stm32f1/I2C/HAL库版/100%一次点亮)
FinClip | 来了, 2022 年 7 月更新大盘点
小几届的学弟问我,软件测试岗是选11k的华为还是20k的小公司,我直呼受不了,太凡尔赛了~
字节跳动软件测试岗,收到offer后我却拒绝了~给面试的人一些忠告....
SQL 经典50题(题目+解答)(1)
博云入选Gartner中国DevOps代表厂商
Nanny Level Tutorial: Write Your Own Mobile Apps and Mini Programs (Part 2)
配置mysql失败了,这是怎么回事呢?
Breaking the Boundary, Huawei's Storage Journey
sva 断言资料
随机推荐
5G基础学习1、5G网络架构、网络接口及协议栈
How to technically ensure the quality of LED display?
List排序 ,取最大值最小值
Geoffery Hinton: The Next Big Thing in Deep Learning
SQLAlchemy使用教程
ES2020-23简单易懂又实用的精选特性讲解 日常开发必备干货!
Jay Chou's new song is released, crawl the "Mojito" MV barrage, and see what the fans have to say!
Shell编程案例
Mysql事务隔离级别与MVCC(多版本并发控制)
MySQL模糊查询性能优化
SQL(面试实战07)
MP的几种查询方式
Oracle 19c 连接PDB
STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)
QT笔记——Q_PROPERTY了解
21 Days Learning Challenge - Day 1 Punch (Screen Density)
开箱即用-使用异步加载布局来优化页面启动速度的几种方案
QT笔记——QT类反射机制简单学习
情景剧《重走长征路》上演
详细总结SoC、DSP、MCU、GPU和FPGA等基础概念