ThreadPoolExecutor线程池及参数介绍

线程池类图如下:

使用Executors工具类创建的线程池,都是创建的ThreadPoolExecutor对象。这个对象的核心参数有7个:

1、corePoolSize 核心线程数,即便线程空闲也会一直在线程池中的线程数,除非设置允许核心线程超时的参数。

2、maximumPoolSize 最大线程数 ,线程池中允许的最大线程,包含核心线程数

3、keepAliveTime 非核心线程空闲等待时间,超过这个时间没有任务的话,非核心线程会被从线程池中销毁。

4、TimeUnit keepAliveTime的时间单位

5、BlockingQueue 任务队列,用来缓存执行excute方法的Runnable任务

6、ThreadFactory 线程工厂 创建新线程时用的工厂

7、RejectedExecutionHandler 拒绝策略, 是当任务队列满了,线程池线程数也达到最大了,这个时候,又有任务要执行的时候,执行什么策略进行处理这些任务。有四种策略

7.1) AbortPolicy: 中止策略(默认) 直接抛出RejectedExecutionException异常

7.2) DiscardPolicy: 丢弃策略 啥都不做,直接丢掉这个任务

7.3) DiscardOldestPolicy: 丢弃最早的未处理的任务策略 会丢掉最早未执行的任务,然后重试当前这个任务

7.4) CallerRunsPolicy: 调用者执行策略 如果executor没有关闭,会在执行execute方法的线程中直接调用任务的run方法。如果executor关闭了,这个任务就会被丢弃不执行。

 

任务与线程执行分配的过程:

线程池里面有线程、任务队列和Worker组成,线程分为核心线程和非核心线程。

当有任务过来的时候,首先核心线程会执行任务。

当核心线程都在执行任务的时候,新来的任务会进入任务队列。

当任务队列满了的时候, 根据线程池最大线程数,创建非核心线程来处理任务。

当所有线程都在执行任务,并且任务队列都满了的时候,新来的任务会按执行拒绝策略。

Worker我理解的是个协调调度者,当任务来的时候他负责调度线程执行任务,添加worker的时候可以指定是核心线程还是非核心线程。Worker实现了AQS和Runnable接口。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值