JAVA线程池ThreadPoolExecutor简介

ThreadPoolExecutor线程池的7个参数

在这里插入图片描述
1.corePoolSize核心线程数,int类型,不能小于0。这个参数代表线程池中存活最小的线程数。

2.maximumPoolSize线程池最大线程数量,int类型,得大于0,而且不小于corePoolSize。这个线程池中最多允许有maximumPoolSize个线程。

3.keepAliveTime空闲线程存活时间,long类型,不能小于0。

4.unit空闲线程存活时间单位。具体可以参考TimeUnit里面得枚举类型(NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS)

5.workQueue任务队列。这里面是有4中类型:
① SynchronousQueue:不会缓存任务得阻塞队列。一个任务过来直接交给线程去执行,如果没有可用线程,则创建新线程,如果线程数量达到maxPoolSize,则执行拒绝策略。通常需要无限的MaximumPoolSize来实现避免拒绝新提交的任务。
②LinkedBlockingQuene:基于链表的无界阻塞队列(其最大容量为Interger.MAX),按照FIFO排序。如果不设定值,超过核心线程数量得任务会一直存入队列,maximumPoolSize不会发挥作用。
③ArrayBlockingQueue:基于数组的有界阻塞队列,按FIFO排序。使用大型队列和小型池可以最大限度地减少CPU使用率、操作系统资源和上下文切换开销,但可以导致人为的低吞吐量。如果任务经常阻塞(对于例如,如果它们是I/O绑定的),则系统可能能够调度所需的线程数超过了您所允许的线程数。使用小队通常需要更大的池大小,这使CPU更繁忙,但可能会遇到不可接受的调度开销,这也降低吞吐量。
④PriorityBlockingQueue:具有优先级的无界阻塞队列,优先级通过参数Comparator实现。

以上5个参数是必填得

6.ThreadFactory:线程工厂,如果不设置,则创建一个默认得工厂,Executors.defaultThreadFactory()。

7.handler :拒绝策略。也是有4种:
① AbortPolicy:中止策略,默认得拒绝策略。在任务不能再提交的时候,抛出异常。
②DiscardPolicy:丢弃策略,丢弃任务,但是不抛出异常。如果线程队列已满,则后续提交的任务都会被丢弃,且是静默丢弃。
③DiscardOldestPolicy:弃老策略,丢弃最旧的未处理任务,然后重新提交被拒绝的任务;
④CallerRunsPolicy:调用者运行策略,由调用线程处理该任务。

ThreadPoolExecutor执行流程

首先我新建一个线程池演示:

new ThreadPoolExecutor(10, 20, 30L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(100))

在这里插入图片描述
多个线程过来,首先创建核心线程去执行,如果任务大于核心线程数,那么就把多余得任务放在队列中等待。如果队列放不下剩余得任务,就会根据maximumPoolSize去创建新的线程执行任务。如果已经创建了最大得线程数了,队列也满了,那么将执行默认得拒绝策略。

ThreadPoolExecutor注意事项

1.使用任务队列得时候注意设置队列得长度。(不然你懂得)
2.设置合理得线程数。(可以参考网上得)
3.使用线程池得时候注意最好使用单例模式。合理使用线程池,避免资源浪费。
4.JUC带得4种线程池都是创建ThreadPoolExecutor,只是设置得参数不一样。

参考: https://blog.csdn.net/weixin_48502062/article/details/106682658
https://blog.csdn.net/ye17186/article/details/89467919

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值