• 面试题之使用无界队列的线程池会导致内存飙升吗?


    答案:会;

    分析:

    创建线程池方式有如下几种:

    Executors.newFixedThreadPool(10);//LinkedBlockingQueue 无限加入队列
    Executors.newScheduledThreadPool(10);//DelayedWorkQueue 队列如果满了,阻塞
    Executors.newSingleThreadScheduledExecutor();//DelayedWorkQueue 队列如果满了,阻塞
    Executors.newCachedThreadPool();//SynchronousQueue 队列如果满了,抛异常
    Executors.newSingleThreadExecutor();//LinkedBlockingQueue 无限加入队列

    jdk7提供了7个阻塞队列,分别是:

    ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列
    LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列
    PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列
    DelayQueue:一个使用优先级队列实现的无界阻塞队列
    SynchronousQueue:一个不存储元素的阻塞队列
    LinkedTransferQueue:一个由链表结构组成的无界阻塞队列
    LinkedBlockingDueue:一个 由链表结构组成的双向阻塞队列

    本文以newFixedThreadPool为例,以下是jdk源码:

    public static ExecutorService newFixedThreadPool(int nThreads) {
            return new ThreadPoolExecutor(nThreads, nThreads,
                                          0L, TimeUnit.MILLISECONDS,
                                          new LinkedBlockingQueue<Runnable>());
        }
    
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }

    参数说明:

    • corePoolSize:核心线程数
    • maximumPoolSize: 最大线程数
    • keepAliveTime:线程指定时间内获取不到任务,则销毁
    • unit:时间单位
    • workQueue:任务队列

    线程池工作原理图解:

     

    LinkedBlockingQueue默认的最大任务数量是Integer.MAX_VALUE,非常大,可以理解为无限大吧;但是存在这种情况,当每个线程获取到一个任务后,执行时间比较长,导致workQueue里积压的任务越来越多,机器的内存使用不停的飙升,最后也会导致OOM。

    不积跬步无以至千里不积小流无以成江海
  • 相关阅读:
    嵌入式开发之web服务器---boa移植
    图像处理之基础---去污算法
    图像处理之基础---傅里叶
    图像处理之基础---卷积
    图像处理之基础---各种滤波
    二维矩阵卷积运算实现
    图像处理之基础---卷积傅立叶变换中的复数
    图像处理-线性滤波-2 图像微分(1、2阶导数和拉普拉斯算子)
    Live555 中的客户端动态库.so的调用方式之一 程序中调用
    20个Flutter实例视频教程-01节底部导航栏和切换效果的制作-1
  • 原文地址:https://www.cnblogs.com/zhaoyan001/p/10769717.html
Copyright © 2020-2023  润新知