2021-06-03

线程池:

线程池的创建:ExecutorService service = new ThreadPoolExecutor(...)

线程池的优势:

1.降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;

2.提高系统响应速度,当有任务到达时,无需等待新线程的创建便能立即执行;

3.方便线程并发的管控,线程若是无限制的创建,不仅会额外消耗大量系统资源,更是占用过多资源而阻塞系统活com等状况,从而降低系统的稳定性,线程池能有效管控线程,统一分配、调优,提高资源使用率;

4.更强大的功能,线程池提供了定时、定期以及可控线程数等功能的线程池,使用方便简单。

创建线程池时,几个关键参数:

corePoolSize:核心线程参数,默认情况下,核心线程一直存活在线程池中,即便他们在线程池中处于闲置状态,除非我们将ThreadPoolExecutor的allowCoreThreadTimeOut属性设为true的时候,这时候处于闲置的核心线程在等待任务到来时会有超时策略,这个超时时间由keepAliveTime来指定。

一旦超过所设置的超时时间,闲置的核心线程就会被终止

maximumPoolSize:线程池中所容纳的最大线程数,如果活动的线程达到这个数值以后,后续的新任务将会被阻塞。包含核心线程数+非核心线程数。

keepAliveTime:非核心线程闲置时的超时时长,对于非核心线程,闲置时间超过这个时间,非核心线程就会被回收。只有对ThreadPoolExecutor的allowCoreThreadTimeOut属性设为true的时候,这个超时时间才会对核心线程产生效果

unit:时间单位

workQueue:线程池中保存等待执行的任务的阻塞队列

threadFactory:为线程池提供新线程的创建

handler:无法处理新任务的时候抛出异常

 

开启线程池的两个方法:execute,没有返回值,不能监听执行结果;submit,会返回一个future,我们可以通过get方法来回去返回值,用于监听线程是否执行完毕。

关闭线程池的两个方法:sutdown,将线程池的状态设置为SHUTDWON状态,中断的是闲置线程。Sutdownnow:将线程池的状态设置为stop,中断所有任务(包括正在执行任务的线程和闲置线程)

 

线程池的执行原理

·①如果在线程池中的线程数量没有达到核心的线程数量,这时候就回启动一个核心线程来执行任务。

·②如果线程池中的线程数量已经超过核心线程数,这时候任务就会被插入到任务队列中排队等待执行。

·③由于任务队列已满,会立即启动 一个非核心线程来执行任务(当然线程池里边目前的线程数量不能超过最大线程数)。

·④如果线程池中的数量达到了所规定的最大值,那么就会拒绝执行此任务,这时候就会调用RejectedExecutionHandler中的rejectedExecution方法来通知调用者。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值