【Java|Java面试必问之线程池的创建使用、线程池的核心参数、线程池的底层工作原理】
文章图片
一、前言大家在面试过程中 , 必不可少的问题是线程池 , 小编也是在面试中被问啥傻了 , JUC就了解的不多 。 加上做系统时 , 很少遇到 , 自己也是一知半解 。 如果还不了解线程池的小伙伴 , 一定要认真看完 , 你会有收获的哈!!最后也为大家汇总了一套2022Java面试题 , 需要的小伙伴私信【面试】哦
二、线程池创建使用
答:使用Executors看一下源码是有好多个 , 经常用的也就三个 , 今天就展示靠上的五种 。
//创建一个定长线程池 , 超出的线程会在队列中等待ExecutorService executorService = Executors.newFixedThreadPool(5);//创建一个单线程化的线程池 , 它只会用唯一的工作线程来执行任务 , ExecutorService executorService1 = Executors.newSingleThreadExecutor();//创建一个可缓存线程池 , 可以自动扩容 , 扩容大小为int最大值 , 因为太大可以直接理解为无限大ExecutorService executorService2 = Executors.newCachedThreadPool();//创建一个定长线程池 , 该线程池可以安排命令在给定延迟后运行 , 或定期执行 。 ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);//1.8新增-创建一个带并行级别的线程池 , 并行级别决定了同一时刻最多有多少个线程在执行 , 不传参数默认为CPU个数// Runtime.getRuntime().availableProcessors()查看本机CPU个数ExecutorService executorService3 = Executors.newWorkStealingPool();
三、线程池的核心参数//创建线程池 , 底层代码public ThreadPoolExecutor(int corePoolSize
int maximumPoolSize
long keepAliveTime
TimeUnit unit
BlockingQueue<Runnable> workQueue
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.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue; this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory; this.handler = handler;
1. corePoolSize:线程池中的核心线程数 , 核心线程会一直存在 , 即使没有任务执行 。
2. maximumPoolSize:线程池能够容纳同时执行的最大线程数 , 此值必须大于等于1
3. keepAliveTime:当线程数大于核心数时 , 这是多余空闲线程在终止前等待新任务的最长时间 。 (意思就是本来核心线程三个 , 已占满 , 扩展到最大线程数到5 , 解决完后没有线程任务了 , 这时设置一个时间 , 过了这个时间被扩展的2个非核心线程会被回收)
4. unit:keepAliveTime的时间单位 。
5. workQueue:任务队列 , 被提交但尚未被执行的任务 , 相当于去饭店吃饭 , 餐桌满了 , 要在外边排队(阻塞队列)
- 微软|微软曾经面试提问,为什么井盖是圆形的?
- 产品设计|经验分享:几个产品经理面试题及答案
- Java|手机也有生产力,ColorOS这些功能你都用过吗?
- java|对标骁龙888,联发科天玑8100曝光,红米K50系列确定搭载
- java|这5款“网红电器”劝你慎买,使用3个月后,谈谈我的真实感受
- MySQL|提权方式及原理简介(面试)
- 传感器|2022字节&阿里JAVA后端社招面试小结
- offer|直播面试、视频简历,这样才能找到新工作
- Java|为什么说OPPO Pad会成为「安卓板皇」?只因这些体验优势太明显
- 视频|荣耀MagicBook V 14首创500万广角双摄 网友直呼视频面试神器:旦用难回