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