Java多线程之ThreadPoolTaskExecutor用法

一、简介

ThreadPoolTaskExecutor线程是Spring的线程池,其底层是依据JDK线程池ThreadPoolExecutor来实现的。

二、参数介绍

corePoolSize:线程池维护线程最小的数量,默认为1
maxPoolSize:线程池维护线程最大数量,默认为Integer.MAX_VALUE
keepAliveSeconds:(maxPoolSize-corePoolSize)部分线程空闲最大存活时间,默认存活时间是60s
queueCapacity:阻塞任务队列的大小,默认为Integer.MAX_VALUE,默认使用LinkedBlockingQueue
allowCoreThreadTimeOut:设置为true的话,keepAliveSeconds参数设置的有效时间对corePoolSize线程也有效,默认是flase
threadFactory::用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。使用开源框架guava提供的ThreadFactoryBuilder可以快速给线程池里的线程设置有意义的名字
rejectedExecutionHandler:拒绝策略,当队列workQueue和线程池maxPoolSize都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务。这个策略默认情况下是AbortPolicy,表示无法处理新任务时抛出异常。

三、拒绝策略

拒绝策略有以下四种,默认情况下是AbortPolicy,也可根据实际业务需求类实现RejectedExecutionHandler接口实现自己的处理策略
1.AbortPolicy:丢弃任务,并且抛出RejectedExecutionException异常;
2.DiscardPolicy:丢弃任务,不处理,不抛出异常;
3.CallerRunsPolicy:直接在execute方法的调用线程中运行被拒绝的任务;
4.DiscardOldestPolicy:丢弃队列中最前面的任务,然后重新尝试执行任务。

四、处理流程

1.查看核心线程池是否已满,不满就创建一条线程执行任务,否则执行第二步。
2.查看任务队列是否已满,不满就将任务存储在任务队列中,否则执行第三步。
3.查看线程池是否已满,即就是是否达到最大线程池数,不满就创建一条线程执行任务,否则就按照策略处理无法执行的任务。

四、代码示例

运行结果:

五、多线程同步工具用法

运行结果:

丢弃队列中最前面的任务,然后重新尝试执行任务

Original: https://www.cnblogs.com/gongxr/p/14468802.html
Author: 星瑞
Title: Java多线程之ThreadPoolTaskExecutor用法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538056/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java SimpleDateFormat[转]

    [补充] [转] http://stackoverflow.com/questions/2603638/why-cant-this-simpledateformat-parse-t…

    Java 2023年5月29日
    099
  • 链表反转类算法题

    反转链表类 NO1. 反转链表 给定一个长度为 n 的链表,反转该链表,输出表头。 方法一:迭代法(推荐使用) 算法流程: step 1 :特殊情况判断,空链表或只有一个结点的链表…

    Java 2023年6月15日
    081
  • 设计模式之结构型模式–组合模式、适配器模式、外观模式、桥接模式

    结构型模式 · 结构型模式概述 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更…

    Java 2023年6月7日
    084
  • AMD Software꞉ Adrenalin Edition闪退问题

    是因为连接了两个显示器的问题,拔掉其中一个显示器的接头,就可以正常使用了,至于往深了的问题,我就不知道了,反正这个情况可以给各位提供一个参考,不一定就都是这个问题导致的。 最近升级…

    Java 2023年6月13日
    0187
  • JVM基础学习(一):JVM内存模型

    在Java进阶知识的学习中,JVM都是避不过去的一关,我个人对于JVM的理解其实就是相当于在操作系统的外层再加了一层中间层,从来屏蔽了具体硬件之间的不同实现,使得Java实现了最重…

    Java 2023年6月7日
    083
  • MySQL 常见面试题/知识点总结!(2021 最新版)| JavaGuide

    相关阅读: 2.7w字!Java基础面试题/知识点总结!(2021 最新版) 这篇文章之前发过,不过,我最近对其进行了重构完善并且修复了很多小问题。所以,在公号再同步一下! 内容很…

    Java 2023年6月9日
    089
  • java任务唤醒和等待

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月29日
    080
  • 【校招VIP】[前端][一本][6分]项目需要考虑到PC端和移动端

    关注【校招VIP】 公众号,回复【简历】 ,添加校招顾问微信,即可获取简历指导! 本份简历是一位21届一本前端同学的简历,简历评分6分。 一、学员简历 二、指导意见 简历模板没有问…

    Java 2023年6月5日
    073
  • 戏说领域驱动设计(廿一)——领域服务

    实体对象和值对象都写完了,本想开始写资源仓库顺便把工作单元再搞搞。不过有一点麻烦的是我不太想把工作单元作为单独的一章来写,一是这东西网上相关的内容太多;二是有的时候使用Spirng…

    Java 2023年6月7日
    089
  • ch05 Java方法

    Java方法 何谓方法? System.out.println(); //类.对象.方法 Java方法是语句的集合,它们在一起执行一个功能。 方法是解决一类问题的步骤的有序组合 方…

    Java 2023年6月9日
    075
  • RabbitMQ 相关概念

    Human beings are designed for many things, but loneliness isn’t one of them. 人类能应对许多…

    Java 2023年6月9日
    087
  • HashMap原理

    Java7 : 数组 + 链表 Java8: 数组 + 链表 + 红黑树 (链表超过8则转为红黑树,小于6则变会链表) >> 加快查询. 源码如下: 参数解释: DEF…

    Java 2023年6月8日
    053
  • 【力扣】1310. 子数组异或查询

    有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值…

    Java 2023年6月8日
    069
  • mybatis 拦截器

    1.mybatis拦截器介绍 拦截器可在mybatis进行sql底层处理的时候执行额外的逻辑,最常见的就是分页逻辑、对结果集进行处理过滤敏感信息等。 public Paramete…

    Java 2023年6月9日
    078
  • SpringBoot之Mybatis开启SQL记录和Pagehelper

    配置mybatis mybatis: #mapper路径 mapper-locations: classpath:mapper/*.xml configuration:  #日志输…

    Java 2023年6月16日
    071
  • Tomcat8下的Redis会话共享

    前言: 最近在做网站的升级,从 Tomcat7升级到 Tomcat8版本,因为没接触过,就以为升级下Tomcat的版本就万事大吉,可是天不如人愿,很顺利的将应用升级到了Tomcat…

    Java 2023年6月6日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球