搜索
写经验 领红包

线程池实现原理面试(线程池介绍)

导语:直击面试-关于线程池,你知道多少(一)

Java中的线程池用于网络的并发请求处理,面试中也是出现最多的问题之一。今天我们一起来分析一下关于线程池的基本原理。

首先我们来看一下线程池的基本构造。

线程池的构造函数

从构造函数中,我们可以看出Executor一共有7个参数。下面我们简单来介绍一下每个参数代表的含义。

corePoolSize :核心线程数maximumPoolSize:最大线程数keepAliveTime:线程保活时间TimeUnit:时间单位BlockingQueue<Runnable>:阻塞队列ThreadFactory:线程工厂RejectedExecutionHandler:拒绝策略

面试过程中,能回答出上面每个参数的含义,基本上能获得面试官的认可,但是这仅仅是开始。我们接下往下看。

问题1.当线程池中的任务执行完了,核心线程会被销毁吗?

对于这个问题。我们首先要知道线程池的工作原理,不然很难去回答这个问题。

我们先看一下先线程池是如果工作的?

当向线程池中提交一个任务时,任务数没有达到核心线程数时,核心线程会执行拿到一个任务进行执行,如果任务数超过到核心线程数。新的任务就会进入阻塞队列,当阻塞队列满了以后,新的任务数没有超过最大线程数的时候,就会立刻创建新的线程去执行任务。当新的任务数超过最大线程数的时候,线程池就会执行拒绝策略。

上面这段希望读者能记一下,面试中回答出来,基本上面试官会对你有新的看法。我们接下往下看。

我们回到问题1.如果当线程池中的任务都执行完了,没有新的任务执行,这个时候 除核心线程之外的其他线程还会存在,等待任务执行。当时间空闲时间超过了保活时间keepAliveTime。其他线程就会被销毁,只保留核心线程。

我们如果了解线程池的工作原理,上面的问题就很简单了。好了。今天的学习就到这,下次我们继续深挖线程池中的其他面试题。欢迎大家一起来学习,如果其他问题,记得下方评论哦。小编会在第一时间为大家解答。

本文内容由小春整理编辑!