JDK自带的构建线程池的方式之newSingleThreadExecutor

news/2024/11/17 9:42:44/

newSingleThreadExecutor从名称上就可以知道这个是一个单例的线程池。在这个线程池中只有一个线程来处理任务。
就可以使用在业务涉及到顺序消费的时候。

newSingleThreadExecutor的代码展示

  • 可以从这个在Executors中的静态方法newSingleThreadExecutor可以发现,该线程池的实现的最内部也是通过ThreadPoolExecutor来进行创建,并把线程数设置为1。
  • 在使用的时候就会出现第一个任务过来进线程池中执行,后续任务则会在LinkedBlockingQueue无界队列中等待上一个任务线程执行完任务之后才能执行。由于只有一个线程在线程池中和队列中任务投递过来的顺序就是线程处理的顺序,从而实现了顺序执行的任务逻辑。

在这里插入图片描述

newSingleThreadExecutor中FinalizableDelegatedExecutorService方法分析

  • 首先这个是在创建好了ThreadPoolExecutor之后外面在包装一层,有点类似于设计模式中的装饰者模式,对类的功能进行了增强。
  • 查看内部的代码发现并没有什么特别之处。super是调用父类的方法,和正常执行创建ThreadPoolExecutor没有什么区别。
  • 重写了finalize方法。该方法是GC在回收对象时要执行的方法。方法体中的含义显而易见就是在对象回收之前让当前线程shutdown,停止掉当前线程。但是由于finalize在执行的时候是守护线程,会随着主线程的执行结束就结束了,所以可能并不能每一次都理想的执行掉shutdown方法来关闭线程。因此就会造成JVM中存在一定概率的线程堆积问题。
  • 所以我们在日常的使用时一定要在业务逻辑执行完成之后手动shutdown

在这里插入图片描述

newSingleThreadExecutor代码效果演示

  • 不难发现每一次获取的线程名称都是一样的。

在这里插入图片描述

  • 发现在执行完成线程池任务之后要是没有手动shutdown,会出现JVM堆积大量线程的问题。

在这里插入图片描述

  • 执行完shutdown就可以解决线程堆积的问题

在这里插入图片描述

有一点需要注意的是,要是创建的线程是作为全局变量进行使用,在局部变量中执行完成业务逻辑关闭掉线程池之后会影响后续的逻辑执行。
在这里插入图片描述


http://www.ppmy.cn/news/493420.html

相关文章

通信专业技术人员职业水平考试岗位设置与岗位描述

级别资格名称考核内容岗位描述初级不分专业计算机与通信技术领域的基本知识和技能;现代通信网的基本构成、业务流程和应用模式;通信网的交换、传输和终端的基本技术;通信软件开发技术及流程;通信领域网管、安全、测试等技术&#…

魔兽世界技能输出宏

1、顺序执行(每一次只执行一个技能) #showtooltip /castsequence 鬼影缠身,腐蚀术,痛楚,痛苦无常

WPS启用宏

WPS默认是没有启用宏的,点击开发者工具后可以看到宏的选项都是灰色的,需要安装wps的vba插件才可以使用。WPS2016版操作步骤如下: 1.下载vba插件: 网盘地址: 链接:https://pan.baidu.com/s/1SDOgr5O5LNSc…

wps 宏 js宏

For Each pf In ActiveSheet.PivotTables("数据透视表1").DataFields: pf.Function xlAverage: Next js 宏 /*** 打印题号列表 Macro* 宏由 huxinxiang 录制&#xff0c;时间: 2022/10/14*/ function 打印题号列表() {var list1 [];for (var index 1; index < …

“宏”在开发中的使用

一、认识“宏” 宏定义又称为宏代换、宏替换&#xff0c;简称“宏” 1、不带参数的宏定义 格式&#xff1a; #define 标识符 字符串//其中的标识符就是所谓的符号常量&#xff0c;也称为“宏名”。 预处理&#xff08;预编译&#xff09;工作也叫做宏展开&#xff1a;将宏…

WPS使用开发工具 宏

个人版WPS下载vba运行即可使用宏工具。 链接&#xff1a;https://pan.baidu.com/s/1pMCYqR4oQ0aCofToHhFCxw 提取码&#xff1a;z5v4 如果链接失效请联系博主更新。 傻瓜式安装过程&#xff1a; 1、点击下载链接下载宏工具。2、下载到电脑任意位置&#xff0c;解压&#xff0…

关于 “宏“

起源 宏 Macro"这个词源于希腊语 “makros”&#xff0c;意为“大的&#xff0c;长的” 延伸使用 随后用于计算机领域是&#xff0c;在汇编语言时用于描述一大堆的汇编指令。 只要用宏指令&#xff0c;就是直接用的一大堆的汇编指令&#xff08;有点函数的味道&#xf…

宏的使用

一、 宏的概念 宏&#xff0c;即 macro 的翻译。该词汇使用范围目前比较广泛&#xff0c;例如&#xff0c;微软把 Office 系列产品中的 VBA 脚本代码也使用宏来指称&#xff1b;一些其他软件也会把某些执行动作的序列录制为脚本&#xff0c;称之为宏&#xff08;例如常用的文…