Executors工具类的相关方法

article/2025/9/9 2:30:45

前言:大家好,我是小威,24届毕业生。本篇将记录创建线程池的Executors工具类里面的方法,方便加深知识印象和复习使用。
本篇文章记录的基础知识,适合在学Java的小白,也适合复习中,面试中的大佬🤩🤩。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

🎁如果大佬在准备面试,可以使用我找实习前用的刷题神器哦刷题神器点这里哟
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

在这里插入图片描述

文章目录

  • 🎈通过Executors类创建线程池
  • 🎆newCachedThreadPool方法
  • 🎊newFixThreadPool方法
  • 🎍newScheduledThreadPool方法
  • 🎠newSingleThreadExecutor方法
  • 🎡newSingleThreadScheduledExecutor方法
  • 🎁newWorkStealingPool方法

🎈通过Executors类创建线程池

线程池的创建方式有很多种,可以通过Executors工具类创建多种模式的线程池,Executors工具类位于java.util.concurrent.locks包中,接下来解释其中的方法。

首先将线程池的七个参数标在这里:
corePoolSize:表示线程池中核心线程的数量;

maximumPoolSize:表示线程池中最大线程数量;

keepAliveTime:针对救急线程的存活时间的变量,就是当线程数量超过线程池中的核心数量时,如果没有新的任务被提交,那么核心线程外的救急线程就会保持在keepAliveTime变量值之后被销毁,而不是立即销毁;

unit:也是针对救急线程,表示keepAliveTime的核心单位;

workQueue:表示线程池中的阻塞队列,阻塞队列中存储着等待执行的任务;

threadFactory:表示用来创建线程的线程工厂。创建线程池的时候,默认的线程工厂创建的线程具有相同的优先级,可以为线程起一个好名字;

handler:表示线程池的拒绝策略。当线程池中的阻塞队列满了的时候,线程数maximumPoolSize也达到了最大值,如果此时再有任务提交到线程池,线程池就会采取策略来拒绝任务的执行。

在这里插入图片描述

🎆newCachedThreadPool方法

调用Executors工具类的newCachedThreadPool方法可以创建一个可缓存的线程池,核心线程数为0,当线程池中的线程数量超过了运行任务所需要的线程数,那么可以回收空闲的线程,默认每60s回收;同时当任务增加的时候,线程池又可以创建新的线程来处理任务。

    public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>());}public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>(),threadFactory);}

🎊newFixThreadPool方法

调用Executors工具类的newFixThreadPool方法可以创建一个固定长度大小的线程池,线程池中的线程都是核心线程,也就是创建的线程池中的线程数量是固定的,能够控制线程池的最大并发数。当向线程池提交任务时,如果线程池中有空闲的线程则会直接执行任务,如果没有空闲线程则会将任务放入阻塞队列中等待,有空闲线程的时候再去执行阻塞队列中的线程。当线程池达到最大线程数时,线程数量会保持不变,一旦某个线程出现异常,线程池会补充一个线程。提交到线程池的任务过多可能会导致内存溢出。

    public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),threadFactory);}

🎍newScheduledThreadPool方法

调用Executors工具类的newScheduledThreadPool方法可以创建一个可以周期性执行任务的线程池,也能够定时执行任务。

    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {return new ScheduledThreadPoolExecutor(corePoolSize);}public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) {return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);}

🎠newSingleThreadExecutor方法

调用Executors工具类的newSingleThreadExecutor方法可以创建只有一个工作线程的线程池,相当于只有一个线程在工作。能够保证任务按照先进先出的顺序,或者优先级顺序执行任务。就像单线程在串行执行任务一样,但是也有些区别,如果这个唯一的线程出现了异常,线程池会创建一个新的线程来代替它。

   public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),threadFactory));}

🎡newSingleThreadScheduledExecutor方法

调用Executors工具类的newSingleThreadScheduledExecutor方法可以创建只有一个工作线程,并且支持定时,周期性执行任务的线程池。

    public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) {return new DelegatedScheduledExecutorService(new ScheduledThreadPoolExecutor(1, threadFactory));}

🎁newWorkStealingPool方法

调用Executors工具类的newSingleThreadExecutor方法可以创建一个具有并行级别的线程池,这是jdk 1.8新增的方法,可以为线程池设置并行级别,通过使用多个队列来减少竞争,需要传递一个并行级别的参数。

    public static ExecutorService newWorkStealingPool(int parallelism) {return new ForkJoinPool(parallelism,ForkJoinPool.defaultForkJoinWorkerThreadFactory,null, true);}

本篇文章就分享到这里了,后续将会分享各种其他关于线程池的知识,感谢大佬认真读完支持咯 ~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论🍻
希望能和诸佬们一起努力,今后进入到心仪的公司
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述


http://chatgpt.dhexx.cn/article/26miqKBk.shtml

相关文章

java并发编程:Executor、Executors、ExecutorService

Executors 在Java 5之后&#xff0c;并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的&#xff0c;其内部使用了线程池机制&#xff0c;它在java.util.cocurrent 包下&#xff0c;通过该框架来控制线程的启动、执行和关闭&#xff0c;可以简化…

nlinfit非线性回归拟合

% % 使用指定函数对下述两变量进行曲线拟合 % % yak1*exp(m*t)k2*exp(-m*t); % % 离散点: t[0,4,8,40], % % y[20.09,64.52,85.83,126.75]; % % t-自变量 y-因变量 a,m,k1,k2为常数 % % 用非线性回归nlinfit&#xff0c;如果数据点多些&#xff0c;效果会更好。 脚本&…

matlab的nlinfit函数,用matlab如何进行非线性拟合 nlinfit函数?

用非线性回归nlinfit&#xff0c;如果数据点多些&#xff0c;效果会更好。 function nonlinefit clc;clear; t[0 4 8 40]; y[20.09 64.52 85.83 126.75]; betanlinfit(t,y,myfunc,[1 1 1 1]) abeta(1) k1beta(2) k2beta(3) mbeta(4) tt0:1:40 yyak1*exp(m*tt)k2*exp(-m*tt) plo…

【MATLAB统计分析与应用100例】案例013:matlab读取Excel数据,调用nlinfit函数作一元非线性回归

1. 一元线性回归分析效果预览 2. matlab完整实现代码 %读取数据,绘制散点图** HeadData = xlsread(examp08_02.xls); %从Excel文

matlab中用polyfit、regress、nlinfit等进行详细的回归分析

目录 1.说明2.回归的介绍2-1.前面两篇所发现的一些问题2-1-1.回归和拟合是什么关系?2-1-2.回归到底是做预测还是用来去脏数据?3.三个函数的核心:最小二乘法3-1.介绍3-2.matlab代码4.函数polyfit(线性)5.函数regress(线性)5-1.输出b,bint,r,rint,stats5-2.应用5.2-1.一元…

曲线拟和函数lsqcurvefit nlinfit

转载自&#xff1a;http://panda0411.com/2011/08/29/curve-fit-and-function-lsqcurvefitnlinfit/ 琢磨了好久matlab自带的曲线拟和工具箱, 发现这货只能解决从离散数据得到各种类型的拟和效果, 但是反之貌似没法实现, google一下有这两个函数可以用:lsqcurvefit和nlinfit ls…

Matlab学习手记——非线性数据拟合:nlinfit和lsqcurvefit

目的&#xff1a;通过一个实例了解Matlab的数据拟合函数nlinfit和lsqcurvefit的使用。 结果图 具体数值 p 0.3000 50.0000 0.4000 200.0000 0.3000 800.0000 p1 0.3267 48.3589 0.4030 226.6525 0.2838 809.6680 p2 0.3267 48.3646 0.4031 226.735…

MATLAB多元非线性回归nlinfit拟合圆拟合球拟合函数

先上实验效果&#xff0c;你觉得有帮助可以继续阅读。代码解析在B站有上传视频&#xff08;用户昵称同名&#xff09;&#xff0c;代码也有详细备注。 拟合圆和球面&#xff1a; 拟合多元非线性函数&#xff1a;y p1*x1p2*x1^2p3*x2p4*x2^2exp(-p5*x3)的拟合结果&#xff1a;…

MATLAB 非线性隐函数拟合采坑记录(使用 fsolve solve nlinfit lsqcurvefit函数)

MATLAB 非线性隐函数拟合采坑记录&#xff08;使用 fsolve solve nlinfit lsqcurvefit函数&#xff09; 问题描述解决思路错误示范1代码思路原因解释模型更正更正模型1更正模型2 错误示范2代码思路原因解释模型更正更正模型1更正模型2 总结 问题描述 MATLAB的 nlinfit 和 lsqc…

Matlab多元非线性函数拟合

看了多篇文章&#xff0c;觉得没有一篇比较全&#xff0c;且可以参照的多元非线性函数拟合&#xff0c;看了多篇文章后总结以下内容&#xff0c;主要以示例给出&#xff0c;希望能帮助到大家快速上手。 1.需要用到的函数语法 beta nlinfit(X, Y, modelfun, beta0) X为你的自…

MATLAB中用nlinfit做多元非线性拟合(回归)

MATLAB中有一个多元非线性拟合的功能是nlinfit 基本语法是&#xff1a; beta nlinfit(X,Y,modelfun,beta0) 式子左边的beta可以是一个向量&#xff0c;向量的元素就是要回归的模型中的参数。 式子右边&#xff0c;modelfun是要回归的函数形式。X是函数的自变量数据&#xff1b…

使用nlinfit函数进行拟合时出现Error using nlinfit>checkFunVals (line 611)

在使用nlinfit函数进行拟合时出错&#xff0c;内容如下&#xff1a; The function you provided as the MODELFUN input has returned Inf or NaN values.从第一行可以看出&#xff0c;由于赋予的初始值导致了函数生成了NaN&#xff08;无解&#xff09;&#xff0c;所以整个回…

【数学建模】多元非线性回归nlinfit(Matlab代码实现)

目录 1 基本语法 2 算例及Matlab代码实现 2.1 算例 2.2 数据 2.3 Matlab代码实现 1 基本语法 2 算例及Matlab代码实现 2.1 算例 熔喷非织造材料是口罩生产的重要原材料&#xff0c;具有很好的过滤性能&#xff0c;其生产工艺简单、成本低、质量轻等特点&#xff0c;受到国…

Matlab 使用nlinfit 函数进行多元非线性回归,并且绘制曲线拟合的误差区间

Matlab 使用nlinfit 函数进行多元非线性回归&#xff0c;并且绘制曲线拟合的误差区间 一、前言二、nlinfit函数使用1、函数语法2、拟合示例&#xff1a; 三、误差阴影绘制四、整体源码五、思考参考博客 一、前言 这个也是最近我接到的一个小项目里的内容&#xff1a; 有一组数…

利用nlinfit函数实现数据非线性拟合

所谓“拟合”&#xff0c;指的是在已有一组实验数据的前提下&#xff0c;研究这组数据有怎样的函数关系——最终结果是从这一组看似漫无规律的数据点中“找出”能用数学表达式表示的规律。 用数学语言描述的拟合定义如下&#xff1a; 一个典型的数据拟合过程包括以下几个步骤&…

Matlab非线性拟合函数——nlinfit

我们平时最常用的非线性拟合函数还是多项式拟合,有一天学弟突然问了我nlinfit 这个函数,然后直接查询matlab官方文档,原来非线性函数还可以用这个函数,下面来看看matlab官方文档的说明: 英文?没关系,下面看一下中文用法: beta = nlinfit(X, Y, modelfun, beta0) beta:…

[MATLAB]非线性回归--自配函数(nlinfit)

当谈到非线性回归模型的时候&#xff0c;同学们应该紧密的将线性回归紧密结合在一起&#xff0c;因为非线性回归很容易过拟合。那我们从一个案例谈一下非线性 拿到题目看到一个变量x一个y&#xff0c;非线性问题步骤应该是这样子的&#xff1a; 画出散点图根据散点图确定须配…

dozer使用: list对象mapping 配置

记录dozer的使用&#xff0c;复杂类型配置。 文档&#xff1a;https://dozermapper.github.io/user-guide.pdf 参考地址&#xff1a;https://github.com/klvnnsrikanth/DozerMappingExample.git Demo 的目录结构&#xff1a; 不是集合的普通映射方式 Source 类: Destinatio…

java dozer map转对象_对象转换利器之Dozer

在Java的世界中&#xff0c;经常会涉及到需要在2个对象中进行转换&#xff0c;比如说&#xff1a; 调用SOAP Web服务&#xff0c;需要把自己的Domain对象转换为Soap服务的Jaxb对象请求&#xff0c; 在分层级SOA架构中&#xff0c;2个层级之间Domain对象的转换&#xff0c; 在分…

SpringBoot2.x 集成 Dozer

Dozer是Java Bean到Java Bean的映射器&#xff0c;它以递归的方式将数据从一个对象复制到另一个对象。通常&#xff0c;这些Java Bean将具有不同的复杂类型。它支持简单属性映射&#xff0c;复杂类型映射&#xff0c;双向映射&#xff0c;隐式显式映射&#xff0c;以及递归映射…