八股文第十一天

日期:2022年8月4日

核心参数(高薪常问)

corePoolSize:核心线程池的大小 

maximumPoolSize:线程池能创建线程的最大个数 

keepAliveTime:空闲线程存活时间 

unit:时间单位,为 keepAliveTime 指定时间单位 

workQueue:阻塞队列,用于保存任务的阻塞队列 

threadFactory:创建线程的工程类 handler:饱和策略(拒绝策略)

线程池的原理(高薪常问)

在这里插入图片描述
线程池的工作过程如下:
当一个任务提交至线程池之后,
1 线程池首先判断核心线程池里的线程是否已经满了。如果不是,则创建一个新的工作线程来执行任务。否则进入 2

2 判断工作队列是否已经满了,倘若还没有满,将线程放入工作队列。否则进入 3

3判断线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行。 如果线程池满了,则交给饱和策略来处理任务。

拒绝策略(了解)

ThreadPoolExecutor.AbortPolicy(系统默认): 丢弃任务并抛出 RejectedExecutionException 异常,让你感知到任务被拒绝了,我们可以根据业务逻辑选择重试或者放弃提交等策略 

ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常,相对而言存在一定的风险,因为我们提交的时候根本不知道这个任务会被丢弃,可能造成数据丢失。 

ThreadPoolExecutor.DiscardOldestPolicy: 丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程),通常是存活时间最长的任务,它也存在一定的数据丢失风险 

ThreadPoolExecutor.CallerRunsPolicy:既不抛弃任务也不抛出异常,而是将某些任务回退到调用者,让调用者去执行它

线程池的关闭(了解)

关闭线程池,可以通过 shutdown 和 shutdownNow 两个方法

原理:遍历线程池中的所有线程,然后依次中断

1、shutdownNow 首先将线程池的状态设置为 STOP,然后尝试停止所有的正在执行和未执行任务的线程,并返回等待执行任务的列表。

2、shutdown 只是将线程池的状态设置为 SHUTDOWN 状态,然后中断所有没有正在执行任务的线程 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇家小黄

创作不易!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值