线程池的三大方法、七大参数、四种拒绝策略详解

1、什么是线程池

线程池:三大方法、七大参数、四种拒绝策略

OOM:Out of memory 内存溢出

程序的运行,本质:占用系统的资源!优化资源的使用!=>池化技术

线程池、连接池、内存池、对象池、常量池 //… 创建、销毁、

池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我

线程池的好处:

  1. 降低资源的消耗
  2. 提高响应的速度
  3. 方便管理

线程池的使用规范
线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。

说明:Executors 返回的线程池对象的弊端如下:

1、 FixedThreadPool 和 SingleThreadPool:

允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。

2、 CachedThreadPool:

允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM。

3、 线程池的三大方法
  1. 单一线程 (只能有一个线程在执行)
  2. 固定线程(设置最大可执行的线程数)
  3. 可伸缩线程(可多可少,根据电脑配置而定,本电脑最多只有32个可同时运行线程)
4、线程池的七大参数

参数一:核心线程数

参数二:最大线程数,在我们通过线程池获取线程数<=最大线程数时,只会使用核心线程数中的线程,比如上面这个参数,核心线程数为2,最大线程数为5,当我们从线程池中获取的线程数<=5时,只会使用2个核心线程数去交替完成

参数三:超时等待时间

参数四:超时等待时间的单位

参数五:阻塞队列,使用数组或者链表都可以,参数为3,可以理解为如果我们一次性从线程池获取线程数>最大线程数+阻塞队列大小,就需要使用到四大拒绝策略

参数六:线程工厂

参数七:拒绝策略
在这里插入图片描述

5、四种拒绝策略
new ThreadPoolExecutor.AbortPolicy() // 默认的拒绝策略,银行满了还有人进来,不处理,抛出异常
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略,哪来的去哪里
new ThreadPoolExecutor.DiscardPolicy()  // 拒绝策略, 队列满了不会抛出异常
new ThreadPoolExecutor.DiscardOldestPolicy()  
// 拒绝策略,队列满了,尝试去和最早的竞争,不会抛出异常

第一种拒绝策略 AbortPolicy

在这里插入图片描述

第二种拒绝策略 CallerRunsPolicy

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值