面试整理-线程池

1. 核心线程池(corePoolSize)

核心线程大小,线程池中维护一个最小的线程数量,即使这些线程处于空闲状态,也一直存在池中,除非设置了核心线程超时时间

2. 最大线程数量(maximunPoolSize)

线程池中允许的最大线程数量。当线程池中核心线程都处理执行状态,有新请求的任务时:

①工作队列未满:新请求的任务加入工作队列

②工作队列已满:线程池会创建新线程,来执行这个任务(受到maximunPoolSize的限制)

3. 空闲线程存活时间(keepAliveTime)

当线程数大于核心线程数时,空闲线程在等待新任务到达的最大时间,如果超过这个时间还没有任务请求,该空闲线程就会被销毁。

4. 存活时间单位(unit)

keepAliveTime的计量单位,枚举类型TimeUnit类

5. 工作队列(workQueue)

①基于数组的有界阻塞队列,FIFO

②基于链表的无界阻塞队列,FIFO

③优先级无界阻塞队列,通过参数Comparator实现对任务进行排序实现优先级,不按照FIFO执行

④不缓存任务的阻塞队列

6. 线程工厂(threadFactory)

创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等;官方使用默认的线程工厂DefaultThreadFactory(implements ThreadFactory)

7. 拒绝策略(handler)

Java 并发超出线程数和工作队列时候的任务请求处理策略,使用了策略设计模式

策略①:AbortPolicy(默认) - 抛出异常,中止任务

该处理在拒绝时抛出RejectedExecutionException,拒绝执行。

策略②:CallerRunsPolicy - 使用调用线程执行任务

调用 execute 方法的线程本身运行任务

策略③:DiscardOldestPolicy - 丢弃队列最老任务,添加新任务

如果执行程序未关闭,则删除工作队列头部的任务,然后重试加入新任务

策略④:DiscardPolicy - 直接丢弃,其他啥都没有

无法执行的任务被简单地删除,将会丢弃当前任务,通过源码可以看出,该策略不会执行任务操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值