zoukankan      html  css  js  c++  java
  • 面试题之使用无界队列的线程池会导致内存飙升吗?

    答案:会;

    分析:

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

    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。

    不积跬步无以至千里不积小流无以成江海
  • 相关阅读:
    【重点推荐】五美凡生论
    语言哲学宣言2018
    四要同环图
    知识分子必须毫不留情反对一切“教养阶层”
    世界上任何一件事的五个模块
    Web 在线制表工具稳定吗?和桌面报表工具对比哪个好用?
    Web 在线制表工具稳定吗?和桌面报表工具对比哪个好用?
    有没有简单易用的数据挖掘工具?
    BI、OLAP、多维分析、CUBE 这几个词是什么关系?
    传说中的中国复杂报表都长什么样?有什么特点?
  • 原文地址:https://www.cnblogs.com/zhaoyan001/p/10769717.html
Copyright © 2011-2022 走看看