Java自定义线程池七个参数具体是什么

线程属于系统的宝贵资源,频繁的创建和销毁线程,会降低效率,所以需要使用线程池

Java开发中百分之99都是单线程开发,但是一单用到多线程,肯定是用到线程池.

有两种使用方法

方法一:使用Executors工具类的两个静态方法来创建,很简单,直接类型.方法名就可以,但是不推荐.ali的开发手册就明确规定了禁止使用Executors工具类的静态方法来创建.要求使用自定义线程池的方法来使用

方法二:创建自定义线程池

首先看要搞明白线程池的参数

JDK中ThreadPoolExecutor类:可以创建线程池对象,但构造方法参数太多,接下来我们就来认识一下都有哪些参数:

第一个参数 int corePoolSize : 核心线程数

线程任务会分为两种:

(1)IO密集型(用于读取/写入文件) = 当前机器的核心数 * 2

(2)CPU密集型(运算) = 当前机器的核心数 + 1

当前机器核心数=电脑CPU的内核,可以通过 任务管理器->性能 查看

第二个参数 int maximumPoolSize : 最大线程数

核心线程数 + 临时线程数 = 最大线程数 比如核心:12 最大:20 临时:3

第三个参数 long keepAliveTime : 临时线程最大存活时间(这是一个数值,并没有单位)

第四个参数 TimeUnit unit : 临时线程最大存活时间(这个是单位) 枚举 (用法:枚举类名.枚举项名)

第五个参数 BlockingQueue<Runnable> workQueue : 阻塞队列(用于存储还没有执行的线程任务)

分为有界和无界两种

(1)有界阻塞队列(规定队列的长度) ArrayBlockingQueue 构造方法指定长度

(2)无界阻塞队列(不规定队列的长度) LinkedBlockingQueue

第六个参数 ThreadFactory threadFactory : 线程工厂

有固定的写法 Thread::NEW 或者 Executors.defaultThreadFactory()

第七个参数 RejectedExecutionHandler handler : 默认拒绝处理策略(当线程任务数量超过了最大线程数+阻塞队列长度时才会起作用)

有四种处理方式

        静态内部类的创建方式:new 外部类名.内部类名();

        (1)AbortPolicy : 一旦无法处理,直接抛出异常.

        (2)DiscardPolicy : 一旦无法处理,不抛异常(把多余的任务丢弃掉)

        (3)DiscardOldestPolicy : 一旦无法处理,用无法处理的任务替换阻塞队列中等待时间最长的任务.

        (4)CallerRunsPolicy : 将无法处理的任务,绕过线程池,让当前线程执行,比如main线程

第一次写博客,看过的家人们劳烦给个点赞支持一下哦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bhbcdxz

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值