java线程池深入理解

线程池经常被面试问到,引起了我的重视,于是花了几个小时看了线程池的源码,做了如下总结

一、线程池主要配置

1.核心线程数corePoolsize

2.maxPoolSize最大线程数

3.缓冲队列

4.拒绝策略

二、线程池的工作原理

线程池根据配置初始化规定数量的核心线程,缓冲队列和拒绝策略,并发线程不是非常大的情况,当核心线程用完了,则新增线程入队列等待,当队列满了,则申请最大值maxSize线程数继续处理队列的线程,如果当并发线程的数量超过队列并且并发数也超过max的则启动拒绝策略,抛出异常(默认策略),当然你可以重写自定义拒绝策略满足你的业务需求,等线程池空闲下来,会回收多余核心线程数的空闲线程。

三、四种拒绝策略模式:

默认策略:当线程数>core数,并且队列满了,直接抛出rejectException。

抛弃策略:当线程数>core数,并且队列满了,不处理,不抛出异常。

移除策略:当线程数>core数,并且队列满了,移除旧的队列的等待数据。

接受 策略:当线程数>core数,并且队列满了,直接用调用者所在线程处理。

四、线程池种类:

single:单线程串行执行。

fix:指定大小的线程

不指定线程数的线程

当消费速度比生产者多,比如秒杀业务,会将超过核心的线程回收。

你可能感兴趣的:(java线程池深入理解)