文章图片
一、前言大家在面试过程中 , 必不可少的问题是线程池 , 小编也是在面试中被问啥傻了 , 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|餐饮管理系统源码JAVA
- 阿里回应旗下东南亚电商Lazada将被剥离?阿里不予回应
- 北美市场|MLBB走出东南亚
- L阿里巴巴拟剥离东南亚电商Lazada,曾尝试融资10亿美元
- 东南亚|中国电商市场三足鼎立:淘宝手握51%的市场占比,但未来难以预料!
- Java|三星S22 Ultra海外卖爆,iPhone 13羡慕吗?
- 阿里回应旗下东南亚电商Lazada将被剥离:不公开回应此事
- meta|Java集合面试题看这篇就够了
- javascript|JavaScript设置页面元素的滚动条一直最下方
- Java|Java全栈学习路线、学习资源和面试题一条龙