java线程池详细讲解理论篇(一)

目录

1:写在前面

1.1:什么是线程池

1.2:为什么需要线程池

2:常见的线程池

2.1:newFixedThreadPool

2.2:newSingleThreadExecutor

2.3:newCachedThreadPool

2.4:newSingleThreadScheduledExecutor

3:线程池重要的7个参数

3.1:初始化线程池的大小

3.2:线程池的最大大小,超过的时候,将会启动拒绝策略

3.3:空闲的线程保持多久会清理

3.4:保留时间单位

3.5:当线程池的数量达到 corePoolSize 的时候会将多余的线程放入大阻塞嘟咧

3.6:线程工厂 ,用来生成线程

3.7:拒绝策略,当线程池数量达到maximumPoolSize的时候会启动

3.7.1:AbortPolicy(默认) 抛出异常

3.7.2:CallerRunsPolicy 将任务抛给调用当前线程池的线程执行

3.7.3:DiscardOldestPolicy 丢弃老的线程

3.7.4:DiscardPolicy 直接丢地,不做任何处理

4:需要注意的地方


1:写在前面

在学习一个东西之前(anything)我们都需要明白2点,是什么,为什么,多多思考,学而不思则罔

1.1:什么是线程池

顾名思义,提供,管理线程的池子

1.2:为什么需要线程池

线程是系统的宝贵资源,线程池可以来管理线程的生命周期,创建线程,快捷的调度任务,提高业务的响应速度

 

2:常见的线程池

2.1:newFixedThreadPool

使用的是LinkedBlockingQueue<Runnable>

2.2:newSingleThreadExecutor

使用的是LinkedBlockingQueue<Runnable>

2.3:newCachedThreadPool

使用的是SynchronousQueue<Runnable>

2.4:newSingleThreadScheduledExecutor

使用的是DelayedWorkQueue<Runnable>

 

3:线程池重要的7个参数

3.1:初始化线程池的大小

int corePoolSize

 

3.2:线程池的最大大小,超过的时候,将会启动拒绝策略

int maximumPoolSize

 

3.3:空闲的线程保持多久会清理

long keepAliveTime

 

3.4:保留时间单位

TimeUnit unit

 

3.5:当线程池的数量达到 corePoolSize 的时候会将多余的线程放入大阻塞嘟咧

BlockingQueue<Runnable> workQueue

 

3.6:线程工厂 ,用来生成线程

ThreadFactory threadFactory

 

3.7:拒绝策略,当线程池数量达到maximumPoolSize的时候会启动

RejectedExecutionHandler handler

以下为线程池拒绝策略的实现类

3.7.1:AbortPolicy(默认) 抛出异常

3.7.2:CallerRunsPolicy 将任务抛给调用当前线程池的线程执行

3.7.3:DiscardOldestPolicy 丢弃老的线程

3.7.4:DiscardPolicy 直接丢地,不做任何处理

 

 

4:需要注意的地方

由于 fix和 single 使用的延迟队列都是LinkedBlockingQueue<Runnable>

而LinkedBlockingQueue<Runnable>在构造的时候会默认使用Integer.MAX_VALUE,虽然看起来是有界的,其实是无界的,因为我们的业务需求在短时间内根本达不到2147483647

public LinkedBlockingQueue() { 
    this(Integer.MAX_VALUE);
}

如果流量巨大无比(速率)的话,队列里面的任务的数量会在短时间内剧增,而线程池中没有那么多的线程来处理相对应的任务,从而堆内存会撑爆,随即产生的就是OOM

java线程池详细讲解代码篇(二) https://mp.csdn.net/postedit/100159321

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值