线程池常见问题
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就会。
以上是关于线程池常见问题的主要内容,如果未能解决你的问题,请参考以下文章