线程池方法及参数概述

线程池方法及参数概述
线程池有4大方法 7大参数 4种拒绝策略
首先介绍一下这三部分分别是做什么的
线程池为啥存在?
线程是珍贵的资源,每个线程在JVM中默认占用1M内存,实际上25,26k就能基本满足需要了,JVM调优时,这部分不得不考虑,频繁的创建和销毁线程要消耗大量的资源,那么,根据我们计算机惯用的重用思想,能否对线程进行重用?这时候就有了线程池,
可是问题又来了,对于不同的需求,是否要提供几种不同的方法供我们选择呢?
所以 ,线程池封装了四种方法
1 Executors.newSingleThreadExecutor()  
专为单线程设计
2 Executors.newFixedThreadPool(int nThreads)    
创建一个固定的线程池的大小,int nThreads是参数,需要几个就写几
3 newCachedThreadPool()      //缓存池,可伸缩的, 遇强则强,遇弱则弱
4 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
主要作用就是可以将定时任务与线程池功能结合使用。
由于是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态
一般来说,初学者只会用这四个方法就够了
but 对于开发来说,鉴于安全和效率的需求,往往使用的是以上四个方法的公共的 ThreadPoolExecutor() 方法来设置多线程,这个方法共有七个参数
int corePoolSize, //核心线程池大小
int maximumPoolSize, //最大核心线程池大小
long keepAliveTime, //超时时间 是个数 无单位
TimeUnit unit, //超时时间单位 例如秒
BlockingQueue workQueue, //阻塞队列
ThreadFactory threadFactory, //线程工厂,创建线程的,一般不用动
RejectedExecutionHandler handler) //拒绝策略
这些参数有默认值
corePoolSize = 1
queueCapacity = Integer.MAX_VALUE
maxPoolSize = Integer.MAX_VALUE
keepAliveTime = 60秒
allowCoreThreadTimeout = false
rejectedExecutionHandler = AbortPolicy()
然而到了我们手里,哪能让它们默认啊,
以上六个参数都好理解,唯独第七个参数,,
当阻塞队列中的任务已到达最大限制,并且线程池中的线程数量也达到最大限制
此时共有四种拒绝策略供我们选择
第一种
不处理这些多余任务 并且抛出异常
第二种
直接抛弃
第三种
不处理,让main线程去做这些多余任务
第四种
让多余任务和队列里的任务竞争,成功有了被执行的可能,失败则不处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小 鱼 儿 呀

您的鼓励就是我创造的动力,懂的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值