线程池面试知识总结

一、什么是线程池

线程池是一种池化技术的典型实现,所谓池话技术就是提前保存大量资源以备不时之需。在资源有限的前提下,使用池化技术可以大大提高资源的利用率,提高性能。(以备不时之需)
线程池还有一个作用就是可以限定线程的个数,不会因为内存中线程个数太多而导致内存溢出。

二、线程池的分类

  • newSingleThreadExecutor:一个单线程的线程池,可以用于需要保证顺序执行的场景,并且只有一个线程在执行。
  • newFixedThreadPool:一个固定大小的线程池,可以用于已知并发压力的情况下,对线程数做限制。
  • newCachedThreadPool:一个可以无限扩大的线程池,比较适合处理执行时间比较小的任务。
  • newScheduledThreadPool:可以延时启动,定时启动的线程池,适用于需要多个后台线程执行周期任务的场景。
  • newWorkStealingPool:一个拥有多个任务队列的线程池,可以减少连接数,创建当前可用cpu数量的线程来并行执行。(JDK1.8)

三、为什么不建议使用Executors创建线程池(阿里巴巴开发手册)

Excutors底层是通过LinkBlockQueue这个类实现的,是链表实现的有界阻塞队列,容量可以进行设置,不设置将是一个无边界阻塞队列,最大长度是Integer.MAXUALUE。会导致内存溢出。

四、线程池的相关参数

public ThreadPoolExecutor(
        int corePoolSize,       //核心线程的数量
        int maximumPoolSize,    //最大线程数量(核心线程+核心以外的线程)
        long keepAliveTime,     //超出核心线程数量以外的线程空闲时的存活时间
        TimeUnit unit,          //存活时间的单位
        BlockingQueue<Runnable> workQueue,    //存放来不及处理的任务的队列,是一个BlockingQueue。
        ThreadFactory threadFactory,     //生产线程的工厂类,可以定义线程名,优先级等。
        RejectedExecutionHandler handler // 当任务无法执行时的处理器
        )
  • corePoolSize
    线程池大小,决定着新提交的任务是新开线程去执行还是放到任务队列中,也是线程池的最最核心的参数。一般线程池开始时是没有线程的,只有当任务来了并且线程数量小于corePoolSize才会创建线程。

  • maximumPoolSize
    最大线程数,线程池能创建的最大线程数量。

  • keepAliveTime
    在线程数量超过corePoolSize后,多余空闲线程的最大存活时间。

  • unit
    时间单位

  • workQueue
    存放来不及处理的任务的队列,是一个BlockingQueue。

  • threadFactory
    生产线程的工厂类,可以定义线程名,优先级等。

  • handler
    拒绝策略,当任务来不及处理的时候,而实行的一种机制

五、线程池提供哪些拒绝策略

1、CallerRunsPolicy:只要线程池没关闭,就直接用调用者所在线程来运行任务
2、AbortPolicy:直接抛出 RejectedExecutionException 异常
3、DiscardPolicy:悄悄把任务放生,不做任何处理
4、DiscardOldestPolicy:该策略将丢弃最老的一个请求,也就是即将被执行的任务,并尝试再次提交当前任务。
也可以通过实现RejectedExecutionHandler接口 自定义策略

六、execute和submit的区别

execute():提交不需要返回值的任务
submit():提交需要返回值的任务

七、关闭线程池

有两个方法关闭线程池:
shutdown() :线程池不再接受新的任务, 但也不会去强制终止已经提交或者正在执行中的任务。
shutdownNow()
对正在执行的任务全部发出interrupt(),停止执行,对还未开始执行的任务全部取消,并且返回还没开始的任务列表。
它们的共同点是:都是通过遍历线程池中的工作线程,逐个调用 Thread.interrup() 来中断线程,所以一些无法响应中断的任务可能永远无法停止(比如 Runnable)。

发布了98 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43732955/article/details/100918674