阿里巴巴面试题- - -多线程&并发篇(三十七)

87 阅读1分钟

​​本文已参与「新人创作礼」活动,一起开启掘金创作之路

前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位。为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,收到心仪公司的Offer~~

内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技术栈

再次渡入繁世,人潮汹涌,眼里茫然,信仰永恒,皆为华夏

​编辑

目录

多线程&并发篇

35、线程池原理知道吗?以及核心参数

36、 线程池的拒绝策略有哪些?

  本期分享到此为止,关注博主不迷路,叶秋学长带你上高速~~


多线程&并发篇

35、线程池原理知道吗?以及核心参数

首先线程池有几个核心的参数概念:

  1. 最大线程数maximumPoolSize

  2. 核心线程数corePoolSize

  3. 活跃时间keepAliveTime

  4. 阻塞队列workQueue

  5. 拒绝策略RejectedExecutionHandler

当提交一个新任务到线程池时,具体的执行流程如下:

  1. 当我们提交任务,线程池会根据corePoolSize大小创建若干任务数量线程执行任务

  2. 当任务的数量超过corePoolSize数量,后续的任务将会进入阻塞队列阻塞排队

  3. 当阻塞队列也满了之后,那么将会继续创建(maximumPoolSize-corePoolSize)个数量的线程来

执行任务,如果任务处理完成,maximumPoolSize-corePoolSize额外创建的线程等待

keepAliveTime之后被自动销毁

  1. 如果达到maximumPoolSize,阻塞队列还是满的状态,那么将根据不同的拒绝策略对应处理

​编辑

36、 线程池的拒绝策略有哪些?

主要有4种拒绝策略:

  1. AbortPolicy:直接丢弃任务,抛出异常,这是默认策略

  2. CallerRunsPolicy:只用调用者所在的线程来处理任务

  3. DiscardOldestPolicy:丢弃等待队列中最旧的任务,并执行当前任务

  4. DiscardPolicy:直接丢弃任务,也不抛出异常

  本期分享到此为止,关注博主不迷路,叶秋学长带你上高速~~