线程池的七大核心参数大白话理解

参数名参数含义
corePoolSize核心线程数
maximumPoolSize最大线程数
keepAliveTime空闲线程存活时间
unit时间单位
workQueue线程池任务队列
threadFactory创建线程的工厂
handler拒绝策略

corePoolSize:核心线程数意思就是当前线程池中,常备、长就绪状态的线程数有几个,是个int值,表示有几个线程是不管你用不用,线程池都有几个线程等着你用

maximumPoolSize:最大线程数意思是这个线程池最多可以有几个线程,也是int值,但是这个值一点是大于等于核心线程值得,要不然会报错java.lang.IllegalArgumentException,比如最大线程写了10,核心线程写了6,那么多出来的四个就是核心的6个线程都被拿走使用了,可以最多再造四个线程给你用,新生成的线程数+核心线程数永远不会>你写的最大线程数,等生成的线程使用完闲置时候,可以根据下边keepAliveTime的存活时间来回收,最终是全部收回,保留最初的核心线程待命

keepAliveTime:空闲线程存活时间意思如上述,比如6个线程不够用了,又生成了4个线程,等忙完之后,这四个闲置了你设置的这个时间,他就被线程池收回了

unit:时间单位就是回收时间的单位,单位如下表,根据实际情况配置即可

参数含义
TimeUnit.DAYS
TimeUnit.HOURS小时
TimeUnit.MINUTES分钟
TimeUnit.SECONDS
TimeUnit.MILLSECONDS毫秒
TimeUnit.MICROSECONDS微秒
TimeUnit.NANOSECONDS纳秒

workQueue:阻塞队列意思可以理解为要给线程处理的东西被排成队,他们的队形是怎么排的

BlockingQueue<Runnable> 类型。取值有以下几种:

参数含义
ArrayBlockingQueue一个由数组结构组成的有界阻塞队列
LinkedBlockingQueue一个由链表结构组成的有界阻塞队列
SynchronousQueue一个不存储元素的阻塞队列,即直接提交给线程,不保持它们
PriorityBlockingQueue一个支持优先级排序的无界阻塞队列
DelayQueue一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素
LinkedTransferQueue一个由链表结构组成的无界阻塞队列。与 SynchronousQueue 类似,还含有非阻塞方法
LinkedBlockingDeque一个由链表结构组成的双向阻塞队列

比较常用的是 LinkedBlockingQueue。线程池的排队策略和该参数息息相关。

threadFactory:线程工厂意思就是由这个方法来创建线程,可以设置线程的名称啊、优先级啊、是不是用户线程啊之类的

public static void main(String[] args) {
    // 创建线程工厂
    ThreadFactory threadFactory = new ThreadFactory() {
        @Override
        public Thread newThread(Runnable r) {
            // 创建线程池中的线程
            Thread thread = new Thread(r);
            // 设置线程名称
            thread.setName("线程-" + r.hashCode());
            // 设置线程优先级
            thread.setPriority(Thread.MAX_PRIORITY);
            // 设置线程类型(守护线程、用户线程), false-用户线程
            thread.setDaemon(false);
            return thread;
        }
    };
    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 2,
            0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), threadFactory);
    threadPoolExecutor.submit(new Runnable() {
        @Override
        public void run() {
            Thread thread = Thread.currentThread();
            System.out.println(String.format("线程: %s, 线程优先级: %d",
                    thread.getName(), thread.getPriority()));
        }
    });
}

handler:拒绝策略意思就是,比如你队列最大容量能存200个队列消息,已经有200个消息排队了,第201个来了之后怎么办的意思,默认是AbortPolicy(拒绝并抛出异常:意思就是不处理第201个,并且抛异常)

参数含义
AbortPolicy拒绝并抛出异常
CallerRunsPolicy使用当前调用的线程来执行此任务
DiscardOldestPolicy抛弃队列头部(最旧)的一个任务,并执行当前任务
DiscardPolicy忽略并抛弃当前任务
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值