线程池

线程池是用来管理和复用线程的工具,它可以减少线程的创建和销毁开销。

1. 线程池的工作流程

任务提交 → 核心线程执行 → 任务队列缓存 → 非核心线程执行 → 拒绝策略处理。

‼️

第一步,线程池通过 submit() 提交任务。

第二步,线程池会先创建核心线程来执行任务。

第三步,如果核心线程都在忙,任务会被放入任务队列中。

第四步,如果任务队列已满,且当前线程数量小于最大线程数,线程池会创建新的线程来处理任务。

第五步,如果线程池中的线程数量已经达到最大线程数,且任务队列已满,线程池会执行拒绝策略。

2. 线程池的主要参数有哪些

线程池有 7 个参数,需要重点关注的有核心线程数、最大线程数、等待队列、拒绝策略。
1、corePoolSize:核心线程数,⻓期存活,执行任务的主力。
2、maximumPoolSize:线程池允许的最大线程数。
3、workQueue:任务队列,存储等待执行的任务。
4、handler:拒绝策略,任务超载时的处理方式。也就是线程数达到 maximumPoolSiz,任务队列也满了的时 候,就会触发拒绝策略。
5、threadFactory:线程工厂,用于创建线程,可自定义线程名。
6、keepAliveTime:非核心线程的存活时间,空闲时间超过该值就销毁。
7、unit:keepAliveTime 参数的时间单位。

3. 线程池的拒绝策略(也叫饱和策略)有哪些? 
有四种:
AbortPolicy:默认的拒绝策略,会抛 RejectedExecutionException 异常。
CallerRunsPolicy:让提交任务的线程自己来执行这个任务,也就是调用 execute 方法的线程。
DiscardOldestPolicy:等待队列会丢弃队列中最老的一个任务,也就是队列中等待最久的任务,然后尝试重 新提交被拒绝的任务。
DiscardPolicy:丢弃被拒绝的任务,不做任何处理也不抛出异常。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务