并发编程面试题(线程池)

1.什么是线程池?
答:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。

通俗点将,线程池就是一个容器,集中管理线程。线程使用完毕不会销毁,而是会先存储在线程池内。

2.线程池的作用?

答:1.降低资源消耗。

       2.提高响应速度。

       3.提高线程的可管理性。

3.常见的线程池有哪几种?

答:有四种。

1.newCachedThreadPool         创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

2.newFixedThreadPool            创建一个定长线程池,可控制最大并发数,超出的线程将在队列中等待。

3.newScheduledThreadPool    创建一个定时线程池,支持定时及周期性的执行任务。

4.newSingleThreadExecutor    创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有的任务按照指定顺序执行(FIFO,LIFO)

4.ThreadPoolExecutor实现线程池的主要参数?

参数具体含义参考此文:https://blog.csdn.net/jiao1902676909/article/details/105740850

答:1.corePoolSize:核心线程数。

       2.maximumPoolSize:最大线程数。

       3.keepAliveTime:线程空闲时间。线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize;如果参数allowCoreThreadTimeout=true,则会直到线程数量=0;

       4.unit:keepAliveTime的单位

       5.workQueue:线程池中的任务队列。常用的有SynchronousQueue、LinkedBlockingDeque、ArrayBlockingQueue。

       6.threadFactory:线程工厂。

       7.RejectedExecutionHandler:拒绝策略。 

               a.AbortPolicy 丢弃任务,抛运行时异常(默认)

               b. CallerRunsPolicy 执行任务

               c.DiscardPolicy 忽视,什么都不会发生

               d.DiscardOldestPolicy 从队列中踢出最先进入队列(队列最前面)的任务

5.线程池原理剖析?

答:

1.如果当前线程池中的线程数目小于corePoolSize,则每来一个任务就会去创建一个线程去执行。

2.如果当前线程池中线程数大于corePoolSize,则每来一个任务就会添加到缓存队列。

3.添加成功,则该任务会等待空闲线程将其取出执行。若添加失败,则会创建新的线程进行执行。

4.如果队列已满,则在总线程数小于maximumPoolSize的前提下,则创建新的线程。

5.如果当前线程池中的线程数达到了maximunPoolSize,则再来新的任务,则执行拒绝策略。

6.如果线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止,直至线程池中的线程数目不大于corePoolSize;如果允许为核心池中的线程设置存活时间,那么核心池中的线程空闲时间超过keepAliveTime,线程也会被终止。

6.如何合理的配置线程池?

参考此文:https://blog.csdn.net/jiao1902676909/article/details/105617366

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值