线程池常见问题

Posted shixing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池常见问题相关的知识,希望对你有一定的参考价值。

今天事较多,就记录一下线程池常见的几大问题吧。

1. Executor提供了几种线程池?

  • newFixedThreadPool(固定线程数量)

  • newSingleThreadExecutor(一个线程)

  • newCachedThreadPool(可根据实际情况调整线程数量的线程池)

  • newScheduledThreadPool(指定线程数量,支持定时及周期性任务执行)

2. 线程池主要的参数

corePoolSize核心池大小,当线程池中的线程达到配置时,线程放入队列;maximumPoolSize线程池最大线程数;KeepAliveTime线程没有任务执行保持的最大时间

3. 常见的拒绝策略和默认的拒绝策略

  • DiscardPolicy:丢弃不抛出一次

  • DiscardOldestPolicy:丢弃队列最前面的任务

  • CallerRunsPolicy:由调用线程执行任务

  • AbortPolicy丢弃抛出异常(默认策略)

4. 任务放置的顺序过程

  • 当添加新任务时,如果当前线程数poolSize<corePoolSize,则直接创建线程

  • 如果线程数poolSize>=corePoolSize,则将任务加入阻塞队列

  • 若阻塞队列已满,且当前线程数poolSize<maximumPoolSize,则新建线程,直到线程数poolSize=maximumPooSize

  • 当线程数poolSize=maximumPooSize,走拒绝策略

5. 任务结束后会不会回收线程

会。以下两种情况会回收线程。(1)完成任务超过keepAliveTime且大于核心线程数

(2)调用以下方法。

shutdown()

6. cache线程池会不会销毁核心线程

会,有个参数allowCoreThreadTimeOut,默认为false,如果为true就会

以上是关于线程池常见问题的主要内容,如果未能解决你的问题,请参考以下文章

Java线程池详解

Java线程池详解

Java 线程池详解

Java线程池详解

线程池与并行度

Motan在服务provider端用于处理request的线程池