线程池七大参数

线程池的七大参数包括corePoolSize、maximumPoolSize、keepAliveTime、TimeUnit、BlockingQueue、ThreadFactory和RejectedExecutionHandler。当新任务到来时,线程池会根据核心线程数、工作队列和最大线程数决定如何处理。拒绝策略包括AbortPolicy、DiscardPolicy、DiscardOldestPolicy和CallerRunsPolicy。工作队列类型包括ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue和DelayQueue,每种都有其特定的特性和使用场景。

转载

线程池七大参数

corePoolSize:核心线程数
maximumPoolSize:最大线程数
keepAliveTime:除核心线程外的空闲线程存活时间
TimeUnit:keepAliveTime的单位
BlockingQueue:工作队列
ThreadFactory:线程工厂
RejectedExecutionHandler:拒绝策略

新任务来的时候,先看线程池是否被创建,如果没有被创建,则直接触发拒绝策略。如果当前线程池没有线程,则立即创建一个线程执行任务,如果核心线程全部被使用,将新来的任务添加到工作队列,如果工作队列已满,则创建新线程执行任务。如果总线程数超过最大线程数,会触发拒绝策略。任务执行结束后,空闲的非核心线程,会在超过keepAliveTime后被收回,核心线程不会被收回(除非设置allowCoreThreadTimeout=true,那么超过存活时间的核心线程也会被回收),在初始化线程池的时候,可以自定义线程工厂,可以指定线程池的名称等内容。

拒绝策略

1、AbortPolicy:丢弃任务并抛出RejectedexEcutionException异常。
2、DiscardPolicy:丢弃任务,但是不抛出异常,可能导致无法发现系统的异常状态。
3、DiscardOldeastPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务
4、CallerPolicy:由调用线程处理该任务

工作队列

1、ArrayBlockingQueue 数组阻塞队列:数组结构,初始化时传入一个大小。有界、FIFO、使用一个重入锁、默认使用非公平锁,入队和出队共用一个锁,互斥
2、LinkedBlockingQueue 链表阻塞队列:链表结构,默认初始化大小为Integer.MAX_VALUE。有界,FIFO,使用两个重入锁分别控制元素的入队和出队,用Condition进行线程间的唤醒和等待。
3、SynchronousQueue 同步队列:容量为0,添加任务必须等待任务取出、这个队列相当于通道,不存储元素
4、PriorityBlockingQueue 优先阻塞队列:无界,默认采用元素自然顺序升序排列
5、DelayQueue 延时队列:无界、元素有过期时间,过期的元素才被取出
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值