> 历史文化
线程池实现原理面试(线程池介绍)
导语:直击面试-关于线程池,你知道多少(一)
Java中的线程池用于网络的并发请求处理,面试中也是出现最多的问题之一。今天我们一起来分析一下关于线程池的基本原理。
首先我们来看一下线程池的基本构造。
线程池的构造函数
从构造函数中,我们可以看出Executor一共有7个参数。下面我们简单来介绍一下每个参数代表的含义。
corePoolSize :核心线程数maximumPoolSize:最大线程数keepAliveTime:线程保活时间TimeUnit:时间单位BlockingQueue<Runnable>:阻塞队列ThreadFactory:线程工厂RejectedExecutionHandler:拒绝策略面试过程中,能回答出上面每个参数的含义,基本上能获得面试官的认可,但是这仅仅是开始。我们接下往下看。
问题1.当线程池中的任务执行完了,核心线程会被销毁吗?
对于这个问题。我们首先要知道线程池的工作原理,不然很难去回答这个问题。
我们先看一下先线程池是如果工作的?
当向线程池中提交一个任务时,任务数没有达到核心线程数时,核心线程会执行拿到一个任务进行执行,如果任务数超过到核心线程数。新的任务就会进入阻塞队列,当阻塞队列满了以后,新的任务数没有超过最大线程数的时候,就会立刻创建新的线程去执行任务。当新的任务数超过最大线程数的时候,线程池就会执行拒绝策略。
上面这段希望读者能记一下,面试中回答出来,基本上面试官会对你有新的看法。我们接下往下看。
我们回到问题1.如果当线程池中的任务都执行完了,没有新的任务执行,这个时候 除核心线程之外的其他线程还会存在,等待任务执行。当时间空闲时间超过了保活时间keepAliveTime。其他线程就会被销毁,只保留核心线程。
我们如果了解线程池的工作原理,上面的问题就很简单了。好了。今天的学习就到这,下次我们继续深挖线程池中的其他面试题。欢迎大家一起来学习,如果其他问题,记得下方评论哦。小编会在第一时间为大家解答。
本文内容由小春整理编辑!