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线程

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

Java自定义线程池参数可以通过ThreadPoolExecutor类的构造方法来实现。具体来说,可以设置以下参数: 1. corePoolSize:线程池的核心线程数,即在没有任务需要执行时线程池的基本大小。默认值为1。 2. maximumPoolSize:线程池允许创建的最大线程数。当队列中的任务数量达到上限时,线程池会继续创建新的线程,直到达到该最大值。默认值为Integer.MAX_VALUE。 3. keepAliveTime:线程池中的线程空闲时间超过该值时,多余的线程会被销毁。默认值为0,表示当线程池中的线程空闲时立即销毁。 4. unit:keepAliveTime的时间单位,默认为TimeUnit.MILLISECONDS。 5. workQueue:任务队列,用于存储等待执行的任务。常见的有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。 6. threadFactory:线程工厂,用于创建新的线程。默认为Executors.defaultThreadFactory()。 7. handler:当线程池中的线程和队列都满了,新提交的任务会由RejectedExecutionHandler来处理。常见的有ThreadPoolExecutor.AbortPolicy、ThreadPoolExecutor.CallerRunsPolicy、ThreadPoolExecutor.DiscardPolicy、ThreadPoolExecutor.DiscardOldestPolicy等。 以下是一个示例代码: ``` ThreadPoolExecutor executor = new ThreadPoolExecutor( 10, // corePoolSize 20, // maximumPoolSize 60, // keepAliveTime TimeUnit.SECONDS, // unit new ArrayBlockingQueue<>(100), // workQueue Executors.defaultThreadFactory(), // threadFactory new ThreadPoolExecutor.AbortPolicy() // handler ); ``` 该示例代码中,线程池的核心线程数为10,最大线程数为20,空闲线程的存活时间为60秒,任务队列为ArrayBlockingQueue,队列容量为100,线程工厂为默认的Executors.defaultThreadFactory(),当线程池中的线程和队列都满了时,新提交的任务会被拒绝并抛出异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bhbcdxz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值