Java线程池底层源码分享和相关面试题(持续更新)

Posted 头发少少少。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java线程池底层源码分享和相关面试题(持续更新)相关的知识,希望对你有一定的参考价值。

1.线程池各个参数讲解

public ThreadPoolExecutor(int corePoolSize, //线程池核心工作线程数量,比如newFixedThreadPool中可以自定义的线程数量就是这个参数
                              int maximumPoolSize, //线程池所有工作线程的数量,比如newFixedThreadPool中的最大工作线程就是核心线程数,newCachedThreadPool中的最大工作线程数是Integer.MAX_VALUE
                              long keepAliveTime, //非核心线程存活的时间,当核心线程不够用的时候,创建出来的辅助工作线程在完成任务空闲多久后会被回收
                              TimeUnit unit, //上面一个参数的单位,分。秒等
                              BlockingQueue<Runnable> workQueue,//底层使用的阻塞队列数据结构,比如newFixedThreadPool底层使用LinkedBlockingQueue。工作队列,保存已提交但是未执行的任务
                              ThreadFactory threadFactory, //创建工作线程的工厂,保持默认即可
                              RejectedExecutionHandler handler) { //拒绝策略,即在所有工作线程数达到上限,底层阻塞队列也满了的时候采取的策略
        if (corePoolSize < 0 ||
            maximumPoolSize <= 0 ||
            maximumPoolSize < corePoolSize ||
            keepAliveTime < 0)
            throw new IllegalArgumentException();
        if (workQueue == null || threadFactory == null || handler == null)
            throw new NullPointerException();
        this.acc = System.getSecurityManager() == null ?
                null :
                AccessController.getContext();
        this.corePoolSize = corePoolSize;
        this.maximumPoolSize = maximumPoolSize;
        this.workQueue = workQueue;
        this.keepAliveTime = unit.toNanos(keepAliveTime);
        this.threadFactory = threadFactory;
        this.handler = handler;
    }

2.常用线程池

1.newSingleThreadExecutor 单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务

2.newFixedThreadExecutor(n) 固定数量的线程池,没提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行

3.newCacheThreadExecutor(推荐使用) 可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。

4.newScheduleThreadExecutor 大小无限制的线程池,支持定时和周期性的执行线程

3.线程池底层执行原理

 

以上是关于Java线程池底层源码分享和相关面试题(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

Java 面试题 —— 零度 Java 面试题系列

面试题-关于Java线程池一篇文章就够了

Java经典面试题汇总多线程

Java并发编程面试加分项之线程池,持续更新加载中~

聊聊面试中的 Java 线程池

Java线程池相关面试题