线程池的运行机制

private ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-call-runner-%d").build();
private ExecutorService taskExe = new ThreadPoolExecutor(10,20,200L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedThreadFactory);

1.corePoolSize:核心线程数量
2.maximumPoolSize:线程不够用时能够创建的最大线程数
3.workQueue:任务等待队列
4.keepAliveTime:抢占的顺序不一定,看运气
5.threadFactory:创建新线程,Executor.defaultThreadFactory()

首先线程池它有一个核心线程数,当线程运行的时候,如果没有设置成预启动加载,线程数是0;
当提交一个新任务的时候,它会建立一个核心线程去执行任务,此时如果一直来任务,之前的也没有执行完,它会一直创建核心线程;
当达到核心线程数时,如果还都在忙,那么就会放到blockingQueue阻塞队列;
如果阻塞队列也放满了,而且核心线程还在忙,那就会去建立非核心线程,如果一直创建,数量达到非核心最大的线程数,就会触发一个拒绝策略

JDK内置了四种拒绝策略:
AbortPolicy直接抛异常
DiscarePolicy悄无声息的丢弃任务
DiscardOldestPolicy丢弃你最早未执行的任务
CallerRunsPolicy谁调用返回谁执行,这种方式会影响新任务的提交速度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值