本文已参与「新人创作礼」活动,一起开启掘金创作之路
前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位。为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,收到心仪公司的Offer~~
内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技术栈
再次渡入繁世,人潮汹涌,眼里茫然,信仰永恒,皆为华夏
编辑
目录
多线程&并发篇
35、线程池原理知道吗?以及核心参数
首先线程池有几个核心的参数概念:
-
最大线程数maximumPoolSize
-
核心线程数corePoolSize
-
活跃时间keepAliveTime
-
阻塞队列workQueue
-
拒绝策略RejectedExecutionHandler
当提交一个新任务到线程池时,具体的执行流程如下:
-
当我们提交任务,线程池会根据corePoolSize大小创建若干任务数量线程执行任务
-
当任务的数量超过corePoolSize数量,后续的任务将会进入阻塞队列阻塞排队
-
当阻塞队列也满了之后,那么将会继续创建(maximumPoolSize-corePoolSize)个数量的线程来
执行任务,如果任务处理完成,maximumPoolSize-corePoolSize额外创建的线程等待
keepAliveTime之后被自动销毁
- 如果达到maximumPoolSize,阻塞队列还是满的状态,那么将根据不同的拒绝策略对应处理
编辑
36、 线程池的拒绝策略有哪些?
主要有4种拒绝策略:
-
AbortPolicy:直接丢弃任务,抛出异常,这是默认策略
-
CallerRunsPolicy:只用调用者所在的线程来处理任务
-
DiscardOldestPolicy:丢弃等待队列中最旧的任务,并执行当前任务
-
DiscardPolicy:直接丢弃任务,也不抛出异常
本期分享到此为止,关注博主不迷路,叶秋学长带你上高速~~