首页 > 其他分享 >ThreadPoolTaskExecutor和ThreadPoolExecutor区别

ThreadPoolTaskExecutor和ThreadPoolExecutor区别

时间:2023-04-15 21:13:24浏览次数:46  
标签:区别 corePoolSize private int 线程 ThreadPoolTaskExecutor ThreadPoolExecutor

ThreadPoolExecutor是Java原生的线程池类,而ThreadPoolTaskExecutor是Spring推出的线程池工具

 

 

一、从核心参数看两者关系

 

ThreadPoolExecutor(java.util.concurrent)

 

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) {
    if (corePoolSize < 0 ||
        maximumPoolSize <= 0 ||
        maximumPoolSize < corePoolSize ||
        keepAliveTime < 0)
        throw new IllegalArgumentException();
    if (workQueue == null || threadFactory == null || handler == null)
        throw new NullPointerException();
    this.acc = System.getSecurityManager() == null ?
        null :
    AccessController.getContext();
    this.corePoolSize = corePoolSize;
    this.maximumPoolSize = maximumPoolSize;
    this.workQueue = workQueue;
    this.keepAliveTime = unit.toNanos(keepAliveTime);
    this.threadFactory = threadFactory;
    this.handler = handler;
}

ThreadPoolTaskExecutor(org.springframework.scheduling.concurrent)

public class ThreadPoolTaskExecutor extends ExecutorConfigurationSupport implements AsyncListenableTaskExecutor, SchedulingTaskExecutor {
    private final Object poolSizeMonitor = new Object();
    private int corePoolSize = 1;
    private int maxPoolSize = 2147483647;
    private int keepAliveSeconds = 60;
    private int queueCapacity = 2147483647;
    private boolean allowCoreThreadTimeOut = false;
    @Nullable
    private TaskDecorator taskDecorator;
    @Nullable
    private ThreadPoolExecutor threadPoolExecutor;
    private final Map<Runnable, Object> decoratedTaskMap;

    public ThreadPoolTaskExecutor() {
        this.decoratedTaskMap = new ConcurrentReferenceHashMap(16, ReferenceType.WEAK);
    }
}

ThreadPoolTaskExecutor的核心参数共有四个,分别是corePoolSize,maxPoolSize,keepAliveSeconds以及queueCapacity。

corePoolSize:核心线程数量(对应ThreadPoolExecutor的corePoolSize)
maxPoolSize:最大线程数量(对应ThreadPoolExecutor的maximumPoolSize)
keepAliveSeconds:线程池维护线程所允许的空闲时间(对应ThreadPoolExecutor的keepAliveTime)
queueCapacity:工作队列容量(对应ThreadPoolExecutor的workQueue的容量)
从ThreadPoolTaskExecutor的唯一带参构造方法可以看出,似乎并没有对上述四个核心参数做自定义初始化的工作,实际上,ThreadPoolTaskExecutor在底层依然依赖ThreadPoolExecutor本身,也就是说该工具更关注于扩展的内容,执行任务依然交由ThreadPoolExecutor去处理。

二、底层原生线程池依赖解析
从上述代码中可以看到,ThreadPoolTaskExecutor继承了ExecutorConfigurationSupport类,该类不仅体现了Spring自身的设计思想,也是ThreadPoolTaskExecutor底层调用ThreadPoolExecutor的具体实现。
————————————————
原文链接:https://blog.csdn.net/weixin_50604409/article/details/119224004

 

 

 

 


标签:区别,corePoolSize,private,int,线程,ThreadPoolTaskExecutor,ThreadPoolExecutor
From: https://www.cnblogs.com/youxin/p/17321881.html

相关文章

  • .Net [FromBody]与[FromForm]区别、各请求格式说明
    [FromBody]与[FromForm]区别1,FromBody:在Action方法传入参数后添加[frombody]属性,参数将以一个整体的josn对象的形式传递。代码示例:///<summary>///发公告///</summary>///<paramname="dateTime"></param>///<retur......
  • magicos7.1和7.0的区别
    荣耀MagicOS7.1操作系统是在荣耀MagicOS7.0操作系统的基础上做的升级,MagicOS7.1操作系统相比较MagicOS7.0操作系统到底有了哪些升级也是大家比较关注的问题。magicos7.1和7.0的区别介绍 1、MagicOS7.1操作系统将MagicOS7.0操作系统的荣耀备忘录升级为了荣耀笔记,可以快速......
  • ChatGPT 和 Whisper 模型的区别
    ChatGPT和Whisper模型是两个不同的模型,但都是由OpenAI开发的基于自然语言处理(NLP)的人工智能技术。ChatGPT是一种基于GPT(GenerativePre-trainedTransformer)架构的语言模型,它可以生成自然流畅的文本,用于生成对话、文章等各种文本内容。Whisper是一种针对语音助手等场景开发的模型......
  • 2023-4-14自增前后缀区别
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ inta=39; intb=39; cout<<a<<endl<<b<<endl; a++; ++b; cout<<"oneyearlater...."<<endl; cout<<"a="<<a<<endl<<"......
  • 单利和复利的主要区别是什么?
    单利和复利都是计息的方式。单利与复利的区别在于利息是否参与计息。单利计算方法下在到期时段内利息不参与计息;复利计算中利息按照约定的计息周期参与计息。二者的计算公式也有不同。例如:一项存款为单利年利率为4.50%,数额为10000元,如果选择存两年,那么两年后应得的利息为: 10000×4......
  • 阿里通义千问、ChatGPT和文心一言有何区别,在哪里能使用?
    目前,聊天机器人技术在人工智能领域的发展越来越成熟了。现在已经有几款备受关注的聊天机器人产品问世,例如ChatGPT、阿里的通义千问和百度的文心一言。它们有什么区别,怎么使用呢?其实,我也挺好奇的,毕竟没有用过,所以打算一个一个来尝试使用一下。看了一些网上的资料,然后自己摸索了一番,......
  • [计科]多进程和多线程的程序在使用上有何区别?
    区别多进程和多线程的程序在使用方式和效果上有很大的区别。多进程程序是在不同的进程之间进行协作的,每个进程都有自己独立的内存空间和系统资源。多个进程之间通过进程间通信(IPC)进行数据和信息的交换。多进程的优点在于可靠性和鲁棒性较高,一个进程出现问题不会影响到其它进程......
  • CPU, mpu mcu soc 的区别
      从它们的名字上看以及 从网上的资料上看,我觉得他们没有任何的区别。都是指的处理单元。但是在实际使用中,人们形成了约定俗称的叫法。比如: mcu :指的是单片机,芯片包含了ramflash以及外设接口。mpu:指的是cortexA系列,包含了cpu,以及外设接口,但是......
  • [计科]渲染性GPU和计算型GPU的区别在哪里?
    使用区别渲染型GPU和计算型GPU主要的区别在于它们被设计用于处理不同类型的工作负载。渲染型GPU主要用于图形渲染和专业3D建模等领域,如游戏开发、影视特效、建筑设计等。渲染型GPU的设计重点在于渲染大量的图形,需要处理的操作主要是三维模型的表面计算、图形纹理映射、几何运算......
  • Java中的long与double的区别
    1.long与double在java中本身都是用64位存储的,但是他们的存储方式不同,导致double可储存的范围比long大很多2.long可以准确存储19位数字,而double只能准备存储16位数字(实际测试,是17位,)。double由于有exp位,可以存16位以上的数字,但是需要以低位的不精确作为代价。如果一个大于17位的lo......