为什么推荐使用线程池?

news2024/11/23 22:38:31

为什么推荐使用线程池?

 更多优秀文章,请扫码关注个人微信公众号或搜索“程序猿小杨”添加。

背景:

  若并发的线程数量很多,且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?

使用线程池可以解决上述问题:

   1、为多线程执行琐碎的任务提供支持; (并发的线程数非常多,且每个执行时间很短就结束);

   2、避免频繁线程创建、销毁过程的资源消耗;(因为频繁创建线程和销毁线程需要时间)

   3、控制资源的使用,根据实际情况合理高效利用资源。(那么有没有一种办法使得线程可以复用)

使用线程池的好处:

       1、降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

      2、提升响应速度:当任务到达时,不需要等到线程创建就能立即执行。

       3、对线程做统一管理:线程是稀缺资源,若无限制创建,不仅消耗系统资源,还会降低系统稳定性,使用线程池可以统一分配、调优和监控。

核心ThreadPoolExecutor类:

    1、使用JDK线程池ThreadPoolExecutor;

    2、使用Spring包下ThreadPoolTaskExecutor多线程。

ThreadPoolExecutor提供的构造函数:

 7.1、corePoolSize:该线程池中核心线程数最大值。

       线程池中有两类线程,核心线程和非核心线程。核心线程默认情况下会一直存在于线程池中,即使这个核心线程什么都不干(铁饭碗),而非核心线程如果长时间的闲置,就会被销毁(临时工)。

7.2、maximumPoolSize:该线程池中线程总数最大值。

  该值等于核心线程数量(corePoolSize) + 非核心线程数量。

7.3、keepAliveTime:非核心线程闲置超时时长。

   非核心线程如果处于闲置状态超过该值,就会被销毁。如果设置allowCoreThreadTimeOut(true)默认false,则会也作用于核心线程。

      如果线程池设置了allowCoreThreadTimeout参数为true,那么当空闲线程超过keepaliveTime后直接停掉。(不会判断线程数是否大于corePoolSize)即:最终线程数会变为0。一般使用默认false即可。

7.4、TimeUnit:表示keepAliveTime的单位。

timeunit.days;               //天timeunit.hours;             //小时timeunit.minutes;           //分钟timeunit.seconds;           //秒timeunit.milliseconds;      //毫秒timeunit.microseconds;      //微妙timeunit.nanoseconds;       //纳

       当一个线程无事可做,超过一定的时间(keepAliveTime)时,线程池会判断,如果当前运行的线程数大于 corePoolSize,那么这个线程就被停掉,所以线程池的所有任务完成后,它最终会收缩到 corePoolSize 的大小。

7.5、BlockingQueue<Runnable> workQueue:阻塞队列。

常用的几个阻塞队列:

  1、LinkedBlockingQueue:链式阻塞队列,底层数据结构是链表,默认大小是Integer.MAX_VALUE,也可以指定大小。(无界队列)

  2、ArrayBlockingQueue:数组阻塞队列,底层数据结构是数组,需要指定队列的大小。(有界队列)

  3、SynchronousQueue:同步队列,内部容量为0,每个put操作必须等待一个take操作,反之亦然。(有界队列)

  4、DelayQueue:延迟队列,该队列中的元素只有当其指定的延迟时间到了,才能够从队列中获取到该元素 。

  注意:keepAliveTime和maximumPoolSize及BlockingQueue的类型均有关系。如果BlockingQueue是无界的,那么永远不会触发maximumPoolSize,自然keepAliveTime也就没有了意义。ArrayBlockingQueue和DelayQueue使用较少,一般使用LinkedBlockingQueue和SynchronousQueue

7.6、ThreadFactory:创建线程的工厂。

       创建线程的工厂,用于批量创建线程,统一在创建线程时设置一些参数,如是否守护线程、线程的优先级等。如果不指定,会新建一个默认的线程工厂。

  默认工厂创建的线程:同属于相同的线程组,具有同为 Thread.NORM_PRIORITY 的优先级,以及名为 “pool-XXX-thread-” 的线程名(XXX为创建线程时顺序序号),且创建的线程都是非守护进程。

  例如:pool-5-thread-6。

7.7、RejectedExecutionHandler:拒绝处理策略。

      线程数量大于最大线程数(maximumPoolSize)就会采用拒绝处理策略,四种拒绝处理的策略为:

    1、ThreadPoolExecutor.AbortPolicy默认拒绝处理策略,丢弃任务并抛出RejectedExecutionException异常。(默认)

    2、ThreadPoolExecutor.DiscardPolicy:丢弃新来的任务,但是不抛出异常。

   3、ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列头部(最旧的)的任务,然后重新尝试执行程序(如果再次失败,重复此过程)。

    4、ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务。

    备注:最科学的的还是 AbortPolicy 提供的处理方式:抛出异常,由开发人员进行处理。

更多优秀文章,请扫码关注个人微信公众号或搜索“程序猿小杨”添加。

推荐文章:

    1、SpringBoot使用@Async实现多线程异步;

    2、线程池的主要处理流程及常用方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用Leangoo领歌scrum工具自动生成燃尽图

在上一篇&#xff0c;我为大家介绍了如何使用Leangoo领歌敏捷工具管理Sprint Backlog_哆啦B梦_的博客-CSDN博客&#xff0c;今天我们一起来看看Leangoo领歌敏捷工具是如何自动生成Scrum燃尽图的。 什么是scrum燃尽图&#xff1f; 燃尽图是在项目完成之前&#xff0c;对需要完…

什么是大数据?

现在大数据发展的如火如荼&#xff0c;也有不少小伙伴对于什么是大数据比较感兴趣&#xff0c;那么大数据在比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力…

文字表达的力量:如何通过编辑和校对优化内容

有效的文字表达能够为读者传递清晰的信息&#xff0c;产生深远的影响。通过编辑和校对优化内容&#xff0c;你可以提升文字表达的力量。以下是一些建议&#xff0c;帮助你在编辑和校对过程中优化内容&#xff0c;提高文字表达的力量。 1.确保内容的逻辑性和连贯性 一个具有说服…

15款好用的效果图设计制作软件推荐

无论你是设计师、工程师、室内设计师还是3D艺术家&#xff0c;你都必须熟悉效果图设计制作软件。 在这篇文章中&#xff0c;我们将向您介绍15个值得尝试的效果图设计制作软件&#xff01; 1.即时设计 即时设计是一款「专业UI设计工具」&#xff0c;不受平台限制&#xff0c;…

Spark学习笔记(一):Spark 基本原理

文章目录 1、Spark 整体架构1.1、Spark 集群角色1.1.1、Cluster Manager1.1.2、Worker Node1.1.3、Executor1.1.4、Application1.1.5、Driver1.1.6、Executor 2、Spark 运行基本流程2.1、RDD2.2、DAG2.3、DAGScheduler2.4、TaskScheduler2.5、Job2.6、Stage2.7、TaskSet Task2.…

宠物托管APP小程序系统开发 让专业的人帮你照顾宠物

宠物是人类的好朋友&#xff0c;为很多家庭带去了温馨与陪伴。但是对于很多养宠人士来说&#xff0c;在工作出差或者节假日出门旅游的时候&#xff0c;宠物的去处成为困扰他们的一大难题。那么有没有一个专业的机构可以在主人不在家的时候&#xff0c;为爱宠提供专业化的管护呢…

为数据弹性而生,阿里云云原生存储再提速

作者&#xff1a;之浩、展逸 企业在 Kubernetes 上运行 AI、大数据应用已成主流&#xff0c;资源弹性和开发运维效率得到显著提升的同时&#xff0c;计算存储分离架构也带来了挑战&#xff1a;网络延迟高、网络费用贵、存储服务带宽不足等。 以 AI 训练、基因计算、工业仿真等…

【Apache-Flink零基础入门】「入门到精通系列」手把手+零基础带你玩转大数据流式处理引擎Flink(事件与时间维度分析)

手把手零基础带你玩转大数据流式处理引擎Flink&#xff08;事件与时间维度分析 总体内容不同时间种类Event-Time 处理Event-Time 处理案例分析 Watermarks水印Watermarks水印的作用 状态保存与迁移保存点(Savepoint) 总结内容不同时间种类Event-Time 处理Watermarks水印状态保存…

百亿大表 Join 提速 300倍!Apache Doris 在约苗数据平台的实时数仓建设实践

本文导读&#xff1a; 约苗平台是国内目前最大的成人预防接种管理服务平台。近年来&#xff0c;随着各功能的不断完善&#xff0c;用户数量不断增多&#xff0c;越来越多注册数据、疫苗类别点击数据、页面浏览时长等数据被生成和积累&#xff0c;如何有效利用这些数据进行处理…

LVS-DR群集

文章目录 LVS-DR群集1 DR模式1.1 数据包流向分析1.2 DR模式的特点1.3 ARP问题 2 DR模式部署2.1 部署192.168.146.60&#xff08;做nfs共享&#xff09;2.2 部署192.168.146.30&#xff08;启动nginx服务&#xff09;2.3 部署192.168.146.50&#xff08;启动nginx服务&#xff0…

向海图强!水声功率放大器助力海洋技术研究及海洋经济扬帆远航!

昨天是第十五个“世界海洋日”&#xff0c;今年的世界海洋日宣传日主题为“保护海洋生态系统人与自然和谐共生”&#xff0c;旨在呼吁全世界人们关注海洋自然环境现况&#xff0c;帮助人们进一步了解我们的海洋家园&#xff0c;保持健康可持续性的的海洋生态系统发展。 作为陆…

AI制作口播视频,原来这么简单

&#x1f4a1;大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、读书和自媒体。 在前面的文章中&#xff0c;我们介绍了生成自己专属卡通形象照&#xff0c;这张照片不仅能作头像&#xff0c;还可以让照片说话&#xff0c;作为我们…

服了呀,现在的00后太卷了.....

前几天我们公司一下子来了几个新人&#xff0c;这些年前人是真能熬啊&#xff0c;本来我们几个老油子都是每天稍微加会班就打算走了&#xff0c;这几个新人一直不走&#xff0c;搞得我们也不好走。 最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备明年…

Windows 禁止 IE 转 Edge「整合方案」

前言 IE 已经合并进 Edge 浏览器&#xff0c;IE「正式入土」 RESPECT ​ 昨晚&#xff0c;公司系统更新&#xff08;Edge&#xff09;结束后&#xff0c;原本正常运行的 RPA 全部下线&#xff0c;原因如图&#xff1a; ​ 早上起来&#xff0c;又是充满希望的一天&#xff0c;于…

力扣 1483. 树节点的第 K 个祖先

力扣 1483. 树节点的第 K 个祖先 题目地址&#xff1a;https://leetcode.cn/problems/kth-ancestor-of-a-tree-node/ 暴力查找&#xff08;超时&#xff09;哈希查找&#xff08;超空间&#xff09;树上倍增 预处理 ancestor 数组记录了第 i 个 node 的倍增祖先&#xff0c…

深度相机、实验箱、扫描仪、机器狗…… 奥比中光超强性能3D视觉应用亮相VALSE 2023

导读 6月10日-12日&#xff0c;VALSE 2023视觉与学习青年学者研讨会在江苏无锡举办&#xff0c;奥比中光作为金牌赞助商&#xff0c;携Femto Mega与Gemini 2系列3D相机以及3D视觉实验箱开发套件、手持3D扫描仪、四足机器狗等创新解决方案参展&#xff0c;为3D视觉开发者提供多…

苹果app上线审核被拒 Guideline 1.2 - Safety - User Generated Content

苹果的App Review We found in our review that your app includes user-generated content but does not have all the required precautions. Apps with user-generated content must take specific steps to moderate content and prevent abusive behavior. Next Steps T…

Spark大数据处理学习笔记2.1 初识Spark

文章目录 一、学习目标二、spark概述&#xff08;一&#xff09;Spark的组件1、Spark Core2、Spark SQL3、Spark Streaming4、MLlib5、Graph X6、独立调度器、Yarn、Mesos &#xff08;二&#xff09;Spark的发展史1、发展简史2、目前最新版本 三、spark特点&#xff08;一&…

现在的00后,真是不要命了?

谁说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;上个月我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪22K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 …

Python与大数据:Hadoop、Spark和Pyspark的应用和数据处理技巧

章节一&#xff1a;引言 在当今的数字时代&#xff0c;数据成为了无处不在的关键资源。大数据的崛起为企业提供了无限的机遇&#xff0c;同时也带来了前所未有的挑战。为了有效地处理和分析大规模数据集&#xff0c;必须依靠强大的工具和技术。在本文中&#xff0c;我们将探讨…